{"id":4072,"name":"django-stubs","ecosystem":"pip","repository_url":"https://github.com/typeddjango/django-stubs","issues_count":2049,"created_at":"2025-06-06T16:30:18.866Z","updated_at":"2025-06-06T16:30:18.866Z","purl":"pkg:pypi/django-stubs","metadata":{"id":2709562,"name":"django-stubs","ecosystem":"pypi","description":"Mypy stubs for Django","homepage":"https://github.com/typeddjango/django-stubs","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/typeddjango/django-stubs","keywords_array":[],"namespace":null,"versions_count":62,"first_release_published_at":"2019-01-20T16:11:56.000Z","latest_release_published_at":"2025-04-26T10:49:02.000Z","latest_release_number":"5.2.0","last_synced_at":"2025-06-05T14:30:55.099Z","created_at":"2022-04-10T10:45:01.013Z","updated_at":"2025-06-05T14:30:55.099Z","registry_url":"https://pypi.org/project/django-stubs/","install_command":"pip install django-stubs --index-url https://pypi.org/simple","documentation_url":"https://django-stubs.readthedocs.io/","metadata":{"funding":"https://github.com/sponsors/typeddjango","documentation":null,"classifiers":["Framework :: Django","Framework :: Django :: 5.0","Framework :: Django :: 5.1","Framework :: Django :: 5.2","License :: OSI Approved :: MIT License","Operating System :: OS Independent","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Typing :: Typed"],"normalized_name":"django-stubs"},"repo_metadata":{"id":37458173,"uuid":"142779680","full_name":"typeddjango/django-stubs","owner":"typeddjango","description":"PEP-484 stubs for Django","archived":false,"fork":false,"pushed_at":"2024-10-29T08:18:50.000Z","size":5618,"stargazers_count":1594,"open_issues_count":217,"forks_count":444,"subscribers_count":17,"default_branch":"master","last_synced_at":"2024-10-29T09:38:26.797Z","etag":null,"topics":["django","hacktoberfest","mypy","pep484","python","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/typeddjango.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"github":"typeddjango","open_collective":"typeddjangoorg"}},"created_at":"2018-07-29T17:08:50.000Z","updated_at":"2024-10-29T08:18:52.000Z","dependencies_parsed_at":"2023-09-28T16:12:59.971Z","dependency_job_id":"ea1860df-7f53-4170-9bf0-5bc78d63830a","html_url":"https://github.com/typeddjango/django-stubs","commit_stats":{"total_commits":1554,"total_committers":270,"mean_commits":"5.7555555555555555","dds":0.7438867438867438,"last_synced_commit":"99638f41fd9f7b1acd776c94baecb832a8dc598d"},"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typeddjango","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222060829,"owners_count":16924553,"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":"typeddjango","name":"TypedDjango","uuid":"52535716","kind":"organization","description":"We make types for Django framework!","email":null,"website":"https://gitter.im/mypy-django/Lobby","location":"Worldwide","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/52535716?v=4","repositories_count":6,"last_synced_at":"2024-10-29T15:54:12.305Z","metadata":{"has_sponsors_listing":true,"funding":{"github":"typeddjango","open_collective":"typeddjangoorg"}},"html_url":"https://github.com/typeddjango","funding_links":["https://github.com/sponsors/typeddjango","https://opencollective.com/typeddjangoorg"],"total_stars":3704,"followers":101,"following":0,"created_at":"2022-11-02T16:26:34.406Z","updated_at":"2024-10-29T15:54:12.305Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typeddjango","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typeddjango/repositories"},"tags":[{"name":"5.1.1","sha":"9b270a0197d3fb01d469ed1a6cb46ca25d2bf0ba","kind":"commit","published_at":"2024-10-26T19:06:40.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/5.1.1","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/5.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.1.1/manifests"},{"name":"5.1.0","sha":"931b5b2f103307b6a55b6f1c079512ca5d5662fa","kind":"commit","published_at":"2024-09-23T17:39:53.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/5.1.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/5.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.1.0/manifests"},{"name":"5.0.4","sha":"d60e31ed0ac4e4115f9ef20041521c201391d592","kind":"commit","published_at":"2024-07-28T18:03:08.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/5.0.4","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/5.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.0.4/manifests"},{"name":"5.0.3","sha":"8eeed9b3ba1839b5c57821f29743d84fdc1806de","kind":"commit","published_at":"2024-07-27T06:16:44.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/5.0.3","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/5.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.0.3/manifests"},{"name":"5.0.2","sha":"5118c5dfbe99504e1cca57ea00bf38bd14014e4f","kind":"commit","published_at":"2024-05-27T12:12:05.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/5.0.2","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/5.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.0.2/manifests"},{"name":"5.0.1","sha":"d9b47afb1b6ac1ce025282289d7382ba5e4845f2","kind":"commit","published_at":"2024-05-27T11:12:57.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/5.0.1","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/5.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.0.1/manifests"},{"name":"5.0.0","sha":"68b199e0b8172e18bb441a9a3ccbf326c19b38f1","kind":"commit","published_at":"2024-04-30T08:54:53.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/5.0.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/5.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/5.0.0/manifests"},{"name":"4.2.7","sha":"e1184c7a69fc03796d2dbe6234389877a434dd4a","kind":"commit","published_at":"2023-12-05T18:57:32.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/4.2.7","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/4.2.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.7/manifests"},{"name":"4.2.6","sha":"a9e6f679b2c0ae381b1855257af23955999575d4","kind":"commit","published_at":"2023-10-23T19:45:33.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/4.2.6","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/4.2.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.6/manifests"},{"name":"4.2.5","sha":"c5e052be3eb1d98687cfb862436f8ce47320a3b5","kind":"commit","published_at":"2023-10-18T16:37:54.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/4.2.5","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/4.2.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.5/manifests"},{"name":"4.2.4","sha":"028826305cc70bc7943c3bdafdd265f6425f6270","kind":"tag","published_at":"2023-09-05T08:15:28.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/4.2.4","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/4.2.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.4/manifests"},{"name":"4.2.3","sha":"2ea83a7088d1ab28631b30b8eb2555faabae0685","kind":"commit","published_at":"2023-06-29T17:03:49.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/4.2.3","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/4.2.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.3/manifests"},{"name":"4.2.2","sha":"5806511cae227511ac1494af53b5a2fb8b759bf4","kind":"commit","published_at":"2023-06-27T17:46:14.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/4.2.2","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/4.2.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.2/manifests"},{"name":"4.2.1","sha":"21e541f8f588f4a42963543c7d115bb4cb95f4c5","kind":"commit","published_at":"2023-06-02T14:00:39.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/4.2.1","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/4.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.1/manifests"},{"name":"4.2.0","sha":"87f48b3ae62cd983c72f2e9639e80a9a7c6e487f","kind":"commit","published_at":"2023-04-27T12:44:18.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/4.2.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/4.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/4.2.0/manifests"},{"name":"1.16.0","sha":"6a850f693671b5d6b5665bd9d18ad054fca581da","kind":"commit","published_at":"2023-03-16T14:25:59.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.16.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.16.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.16.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.16.0/manifests"},{"name":"django-stubs-ext@0.8.0","sha":"dd92489802cce5db559b69072d9867e7e5f3520a","kind":"commit","published_at":"2023-03-15T17:12:00.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/django-stubs-ext@0.8.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/django-stubs-ext@0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/django-stubs-ext@0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/django-stubs-ext@0.8.0/manifests"},{"name":"1.15.0","sha":"74c39d53d6cdc72bfcd3400d66dc203ad3706c4b","kind":"commit","published_at":"2023-02-22T10:48:30.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.15.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.15.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.15.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.15.0/manifests"},{"name":"1.14.0","sha":"53387691865d2c3c8be2e7b68afaa94ce6e072b6","kind":"commit","published_at":"2023-01-26T10:42:41.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.14.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.14.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.14.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.14.0/manifests"},{"name":"1.13.2","sha":"7d50e5b1eaedc9e95dc8ed35f10f93ec73239ae0","kind":"commit","published_at":"2023-01-21T12:36:19.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.13.2","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.13.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.13.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.13.2/manifests"},{"name":"1.13.1","sha":"090aea6783a4fa45ab6419fb2c22c286d8a5852c","kind":"tag","published_at":"2022-12-08T09:16:12.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.13.1","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.13.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.13.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.13.1/manifests"},{"name":"1.13.0","sha":"d4899596de8297707935f232d1255b882aafbd69","kind":"tag","published_at":"2022-11-03T10:27:27.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.13.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.13.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.13.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.13.0/manifests"},{"name":"django-stubs@1.12.0","sha":"d6a9a4ef03b589cf82954bf229b920102a16e3d2","kind":"tag","published_at":"2022-06-17T15:14:16.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/django-stubs@1.12.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/django-stubs@1.12.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/django-stubs@1.12.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/django-stubs@1.12.0/manifests"},{"name":"django-stubs-ext@0.5.0","sha":"d6a9a4ef03b589cf82954bf229b920102a16e3d2","kind":"tag","published_at":"2022-06-17T15:11:46.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/django-stubs-ext@0.5.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/django-stubs-ext@0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/django-stubs-ext@0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/django-stubs-ext@0.5.0/manifests"},{"name":"v1.11.0","sha":"4a90ad9edc280ddc3e4b3abc1f7e108e94992a0e","kind":"commit","published_at":"2022-05-24T09:22:43.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v1.11.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v1.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v1.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v1.11.0/manifests"},{"name":"1.10.1","sha":"4e3f9d6f06d6253f28638a52b795ad00569fe147","kind":"tag","published_at":"2022-04-12T14:45:16.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.10.1","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.10.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.10.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.10.1/manifests"},{"name":"1.10.0","sha":"3c58270a78feabf5d184510c61dbd36c2c121690","kind":"tag","published_at":"2022-03-26T06:24:28.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.10.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.10.0/manifests"},{"name":"1.9.0","sha":"a33d8a9e59613efaa6c37bfc8ae3b88e4c751f51","kind":"tag","published_at":"2021-09-04T08:54:39.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.9.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.9.0/manifests"},{"name":"1.8.0","sha":"3cca71a58f787d96193acfe3bf7d5afb3485e105","kind":"tag","published_at":"2021-04-12T10:20:50.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.8.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.8.0/manifests"},{"name":"1.7.0","sha":"cb1fa08a8298717c3284ea1b895290de150626c8","kind":"tag","published_at":"2020-10-28T08:48:57.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.7.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.7.0/manifests"},{"name":"1.6.0","sha":"645ee97e78a9e1322058241c11eb10af452e27d5","kind":"tag","published_at":"2020-10-01T08:09:34.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.6.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.6.0/manifests"},{"name":"v1.5.0","sha":"1af3a12f2c7df2513d5a80d28edc80c8376a1e93","kind":"commit","published_at":"2020-03-14T21:59:58.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v1.5.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v1.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v1.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v1.5.0/manifests"},{"name":"1.4.0","sha":"38135f2d1f567716486762f30a47205b8bb2ed32","kind":"commit","published_at":"2019-12-17T21:13:11.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.4.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.4.0/manifests"},{"name":"1.3.3","sha":"3c3dfcbc9f711a51945bd38561513afade3ecf72","kind":"commit","published_at":"2019-12-17T16:20:27.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.3.3","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.3.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.3.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.3.3/manifests"},{"name":"1.3.2","sha":"f7e1cfc6c7016eff604d0eacf6bd6fa9a75eccc3","kind":"commit","published_at":"2019-12-13T20:55:08.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.3.2","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.3.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.3.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.3.2/manifests"},{"name":"v1.3.1","sha":"58326050530e72d4d58033ae04abafac8dfd58b9","kind":"commit","published_at":"2019-12-12T05:20:52.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v1.3.1","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v1.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v1.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v1.3.1/manifests"},{"name":"v1.3.0","sha":"540e28f4c6f771308b7df0556e4d9a79cbd6a72d","kind":"commit","published_at":"2019-12-06T20:37:19.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v1.3.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v1.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v1.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v1.3.0/manifests"},{"name":"v1.2.0","sha":"dceb0751522395cbe86c8db924372bdfec6b1adb","kind":"commit","published_at":"2019-10-05T18:36:41.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v1.2.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v1.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v1.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v1.2.0/manifests"},{"name":"1.1.0","sha":"de4fa924418a5c7565aa85c464c857018e7239b6","kind":"commit","published_at":"2019-08-24T15:40:57.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.1.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.1.0/manifests"},{"name":"1.0.2","sha":"5d2efdb80bb3adab3851a86da20a712778bc272d","kind":"commit","published_at":"2019-07-26T19:47:02.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.0.2","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.0.2/manifests"},{"name":"1.0.1","sha":"ac40b8076466afa86a0c51569764a1cab01153c6","kind":"commit","published_at":"2019-07-26T15:48:38.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.0.1","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.0.1/manifests"},{"name":"1.0.0","sha":"b4cd9757b040c9afaff7bcb3d70609911fca5cf7","kind":"commit","published_at":"2019-07-25T17:14:03.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/1.0.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/1.0.0/manifests"},{"name":"v0.12.1","sha":"86642e3ddd437137682158053fc3687fbb5ed0e4","kind":"commit","published_at":"2019-04-15T11:50:43.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.12.1","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.12.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.12.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.12.1/manifests"},{"name":"v0.12.0","sha":"5dd6eccdb5e7a06afb41a37cddca97e1bed5d3dd","kind":"commit","published_at":"2019-04-12T14:22:18.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.12.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.12.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.12.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.12.0/manifests"},{"name":"v0.11.1","sha":"13d19017b7fdd1aa780b091cf1ce898807caffca","kind":"commit","published_at":"2019-04-01T16:40:13.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.11.1","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.11.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.11.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.11.1/manifests"},{"name":"v0.11.0","sha":"304cb19de603cbbee6833832074d7d2d96b7b98e","kind":"commit","published_at":"2019-03-31T22:43:14.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.11.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.11.0/manifests"},{"name":"v0.10.0","sha":"0f5b45fba14b7dd3d68373551cac33283ea6b2d8","kind":"commit","published_at":"2019-03-25T10:31:41.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.10.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.10.0/manifests"},{"name":"v0.9.0","sha":"c3d76f9a1ed62355322c743a83e364510d59cf11","kind":"commit","published_at":"2019-03-10T17:03:00.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.9.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.9.0/manifests"},{"name":"v0.8.2","sha":"8978ad471f2cec0aa74256fe491e2e07887f1006","kind":"commit","published_at":"2019-03-06T09:05:24.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.8.2","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.8.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.8.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.8.2/manifests"},{"name":"v0.8.1","sha":"194489ee8d525f57e83ff99d6b7ca9f937aa1e0c","kind":"commit","published_at":"2019-03-05T17:21:43.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.8.1","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.8.1/manifests"},{"name":"v0.8.0","sha":"64f8870d0b4257ec8d6a46710169485a59ddaa24","kind":"commit","published_at":"2019-02-27T14:59:04.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.8.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.8.0/manifests"},{"name":"v0.7.0","sha":"9ea25f3e5693cdb50422fd224fe9ea92a570ffb8","kind":"commit","published_at":"2019-02-21T21:13:59.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.7.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"e5b2496eb547b581c0edb96742b6e0e19272b907","kind":"commit","published_at":"2019-02-17T22:05:57.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.6.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"4cb10390cfa5343ca054b9ec8881a873d8d07000","kind":"commit","published_at":"2019-02-14T00:34:49.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.5.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.5.0/manifests"},{"name":"v0.4.0","sha":"cf7c263fb52f0bc04ef2f5f9cfcc6b925c04f499","kind":"commit","published_at":"2019-02-12T14:09:28.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.4.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.4.0/manifests"},{"name":"v0.3.0","sha":"6fcccb37693a43bf969103c71821c8aea5d08a0d","kind":"commit","published_at":"2019-02-03T18:59:05.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.3.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.3.0/manifests"},{"name":"v0.2.0","sha":"a893fa3f0a922f422916fc44497fb2e8596d7e14","kind":"commit","published_at":"2019-01-24T16:58:02.000Z","download_url":"https://codeload.github.com/typeddjango/django-stubs/tar.gz/v0.2.0","html_url":"https://github.com/typeddjango/django-stubs/releases/tag/v0.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeddjango%2Fdjango-stubs/tags/v0.2.0/manifests"}]},"repo_metadata_updated_at":"2024-11-10T21:10:46.691Z","dependent_packages_count":78,"downloads":3381984,"downloads_period":"last-month","dependent_repos_count":1444,"rankings":{"downloads":0.3061663319616345,"dependent_repos_count":0.3007756221752946,"dependent_packages_count":0.27996227710543864,"stargazers_count":1.8425467248218832,"forks_count":2.7050071745356288,"docker_downloads_count":1.2149440486293395,"average":1.1082336965382031},"purl":"pkg:pypi/django-stubs","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/django-stubs","docker_dependents_count":67,"docker_downloads_count":6068448,"usage_url":"https://repos.ecosyste.ms/usage/pypi/django-stubs","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/django-stubs/dependencies","status":null,"funding_links":["https://github.com/sponsors/typeddjango","https://opencollective.com/typeddjangoorg"],"critical":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/django-stubs/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/django-stubs/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/django-stubs/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/django-stubs/related_packages","maintainers":[{"uuid":"sobolevn","login":"sobolevn","name":null,"email":null,"url":null,"packages_count":42,"html_url":"https://pypi.org/user/sobolevn/","role":null,"created_at":"2022-12-16T02:07:30.114Z","updated_at":"2022-12-16T02:07:30.114Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/sobolevn/packages"},{"uuid":"AdamChainz","login":"AdamChainz","name":null,"email":null,"url":null,"packages_count":86,"html_url":"https://pypi.org/user/AdamChainz/","role":null,"created_at":"2022-12-16T02:07:30.140Z","updated_at":"2022-12-16T02:07:30.140Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/AdamChainz/packages"},{"uuid":"intgr","login":"intgr","name":null,"email":null,"url":null,"packages_count":7,"html_url":"https://pypi.org/user/intgr/","role":null,"created_at":"2022-12-16T02:07:30.153Z","updated_at":"2022-12-16T02:07:30.153Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/intgr/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":445,"unique_repositories_count_past_30_days":23,"recent_issues":[{"uuid":"5343446291","node_id":"PR_kwDOTRUWeM8AAAABCI9iNw","number":22,"state":"closed","title":"chore(deps): bump the python group across 1 directory with 19 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-07T02:19:13.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-04T02:19:10.000Z","updated_at":"2026-09-07T02:19:17.000Z","time_to_close":259203,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python","update_count":19,"packages":[{"name":"daphne","old_version":"4.2.2","new_version":"4.2.3","repository_url":"https://github.com/django/daphne"},{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1","repository_url":"https://github.com/anymail/django-anymail"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.2.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"litellm","old_version":"1.91.1","new_version":"1.99.0","repository_url":"https://github.com/BerriAI/litellm"},{"name":"psycopg","old_version":"3.3.4","new_version":"3.3.5"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"coverage","old_version":"7.15.1","new_version":"7.16.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0"},{"name":"djangorestframework-stubs","old_version":"3.17.0","new_version":"3.18.1","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.40.5","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.21","new_version":"0.16.5","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 19 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [daphne](https://github.com/django/daphne) | `4.2.2` | `4.2.3` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.2.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [litellm](https://github.com/BerriAI/litellm) | `1.91.1` | `1.99.0` |\n| [psycopg[binary]](https://github.com/psycopg/psycopg) | `3.3.4` | `3.3.5` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.1` | `7.16.0` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.0` | `3.18.1` |\n| [djlint](https://github.com/djlint/djLint) | `1.40.5` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.21` | `0.16.5` |\n\n\nUpdates `daphne` from 4.2.2 to 4.2.3\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/daphne/blob/main/CHANGELOG.txt\"\u003edaphne's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.2.3 (2026-07-21)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003e--websocket-max-message-size\u003c/code\u003e and \u003ccode\u003e--websocket-max-frame-size\u003c/code\u003e CLI\nflags to the \u003ccode\u003erunserver\u003c/code\u003e management command for use in development.\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/django/daphne/commit/8a60e56ef8c9b5a4cc4979a3ece6970c73bbd025\"\u003e\u003ccode\u003e8a60e56\u003c/code\u003e\u003c/a\u003e Bumped version and changelog for v4.2.3 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/daphne/commit/389b9a753b165a417c082212f9da015e0cf5fd37\"\u003e\u003ccode\u003e389b9a7\u003c/code\u003e\u003c/a\u003e Add ability to configure websocket message size when running as django dev se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/daphne/commit/0cd79c253b6995952b0f66c3e8509edc9bd78ad7\"\u003e\u003ccode\u003e0cd79c2\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django/daphne/issues/571\"\u003e#571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django/daphne/compare/4.2.2...4.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\u003cbr /\u003e\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\u003cbr /\u003e\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\u003cbr /\u003e\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\u003cbr /\u003e\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\u003cbr /\u003e\nin Django's documentation for recommendations.\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.2.0\u003c/h2\u003e\n\u003cp\u003eCleartext HTTP/2 lands, and an HTTP/2 security fix.\u003c/p\u003e\n\u003ch2\u003eCleartext HTTP/2 (h2c)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp2_cleartext\u003c/code\u003e accepts \u003ccode\u003eprior-knowledge\u003c/code\u003e, \u003ccode\u003eupgrade\u003c/code\u003e, \u003ccode\u003eboth\u003c/code\u003e or \u003ccode\u003eoff\u003c/code\u003e (the\ndefault). Prior knowledge serves a connection that opens with the HTTP/2\npreface; \u003ccode\u003eupgrade\u003c/code\u003e honours an HTTP/1.1 \u003ccode\u003eUpgrade: h2c\u003c/code\u003e request. Both work on the\ngthread, gevent and asgi workers.\u003c/p\u003e\n\u003cp\u003eThis is for deployments where TLS is terminated by a proxy that speaks HTTP/2\nupstream, so the hop into gunicorn no longer drops to HTTP/1.1. Only peers in\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e are considered; everyone else is served HTTP/1.x exactly\nas if the setting were off. Each mechanism is enabled separately, so turning one\non does not turn the other on.\u003c/p\u003e\n\u003cp\u003eDo not expose a cleartext HTTP/2 port to the internet.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eHTTP2Request\u003c/code\u003e built its headers straight from the stream, so nothing the HTTP/1\npath enforces applied over HTTP/2: the underscore and \u003ccode\u003eheader_map\u003c/code\u003e policy,\nduplicate \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e, control characters in values, and the\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e trust gate. An untrusted client could set \u003ccode\u003eSCRIPT_NAME\u003c/code\u003e\nand forge \u003ccode\u003eHTTP_*\u003c/code\u003e entries in the WSGI environ, and decide \u003ccode\u003ewsgi.url_scheme\u003c/code\u003e\nthrough \u003ccode\u003e:scheme\u003c/code\u003e. Both request classes now share one policy mixin, and the\nscheme comes from the transport.\u003c/p\u003e\n\u003cp\u003eIf you serve HTTP/2, this is the reason to upgrade.\u003c/p\u003e\n\u003ch2\u003eOther HTTP/2 fixes\u003c/h2\u003e\n\u003cp\u003eWSGI responses were buffered whole before anything was sent; they stream now.\nHEAD, 204 and 304 no longer carry a body. Events read while blocked on a\nflow-control window were discarded, losing requests and body data outright.\n\u003ccode\u003esendfile()\u003c/code\u003e is refused on HTTP/2 responses rather than bypassing framing.\u003c/p\u003e\n\u003ch2\u003eRequest bodies dropped on Upgrade requests\u003c/h2\u003e\n\u003cp\u003eOn the ASGI worker with the fast parser, any request carrying an \u003ccode\u003eUpgrade\u003c/code\u003e\nheader reached the application with an empty body, whatever the header's value\nand with HTTP/2 switched off entirely. Fixed in \u003ccode\u003egunicorn_h1c\u003c/code\u003e 0.6.9, which the\n\u003ccode\u003efast\u003c/code\u003e extra now requires.\u003c/p\u003e\n\u003cp\u003eFull changelog: \u003ca href=\"https://gunicorn.org/news/\"\u003ehttps://gunicorn.org/news/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/36f2a3c1b80dfa41d70859d12c5bfbbdc23a3c38\"\u003e\u003ccode\u003e36f2a3c\u003c/code\u003e\u003c/a\u003e gunicorn 26.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbba3505f423bfb91af3a87e49ed9d232f39a8fe\"\u003e\u003ccode\u003ecbba350\u003c/code\u003e\u003c/a\u003e test: cover the h2c edge paths that had none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/988541112ebcf3f795c020fc394aa7eed75f9f53\"\u003e\u003ccode\u003e9885411\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3703\"\u003e#3703\u003c/a\u003e from cormier/fix-inconsistency-in-control-socket-docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/86f0919806a2d4d4cce376cc2088352e7643b139\"\u003e\u003ccode\u003e86f0919\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3704\"\u003e#3704\u003c/a\u003e from methane/doc-wsgi-h1c\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/585355122efe736946b977c5605e404ff2d6ddd4\"\u003e\u003ccode\u003e5853551\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3712\"\u003e#3712\u003c/a\u003e from Rotzbua/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7bce87e2aa29a4a794eb2b113ff811cad6a80736\"\u003e\u003ccode\u003e7bce87e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3700\"\u003e#3700\u003c/a\u003e from benoitc/fix/sponsor-logo-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/972dfb03b110c430712c32a3d92ef6397ff8eff6\"\u003e\u003ccode\u003e972dfb0\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3690\"\u003e#3690\u003c/a\u003e from melbinjp/docs/contributing-settings-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7b3f16be8d9cc051538b7f0b58b236b37c9550f8\"\u003e\u003ccode\u003e7b3f16b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3711\"\u003e#3711\u003c/a\u003e from benoitc/docs/http2-changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5bf237c0c7ef5bcdc63046645a17d6bafd609a34\"\u003e\u003ccode\u003e5bf237c\u003c/code\u003e\u003c/a\u003e http2: require gunicorn_h1c 0.6.9 and drop the upgrade body workaround\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7cf03385c574228e28c4952fd410ed2df02acc94\"\u003e\u003ccode\u003e7cf0338\u003c/code\u003e\u003c/a\u003e test: skip the fast-parser cases when gunicorn_h1c is absent\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `litellm` from 1.91.1 to 1.99.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/BerriAI/litellm/releases\"\u003elitellm's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.99.0\u003c/h2\u003e\n\u003ch2\u003eVerify Docker Image Signature\u003c/h2\u003e\n\u003cp\u003eAll LiteLLM Docker images are signed with \u003ca href=\"https://docs.sigstore.dev/cosign/overview/\"\u003ecosign\u003c/a\u003e. Every release is signed with the same key introduced in \u003ca href=\"https://github.com/BerriAI/litellm/commit/0112e53046018d726492c814b3644b7d376029d0\"\u003ecommit \u003ccode\u003e0112e53\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eVerify using the pinned commit hash (recommended):\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eA commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003ecosign verify \\\n  --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \\\n  ghcr.io/berriai/litellm:v1.99.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eVerify using the release tag (convenience):\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eTags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003ecosign verify \\\n  --key https://raw.githubusercontent.com/BerriAI/litellm/v1.99.0/cosign.pub \\\n  ghcr.io/berriai/litellm:v1.99.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eExpected output:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eThe following checks were performed on each of these signatures:\n  - The cosign claims were validated\n  - The signatures were verified against the specified public key\n\u003c/code\u003e\u003c/pre\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore(typing): drop 1.3k basedpyright errors across 30 Any hotspot files by \u003ca href=\"https://github.com/mateo-berri\"\u003e\u003ccode\u003e@​mateo-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/37073\"\u003eBerriAI/litellm#37073\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(proxy): register WebSocket passthrough for OpenAI prefixes by \u003ca href=\"https://github.com/LHMQ878\"\u003e\u003ccode\u003e@​LHMQ878\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36151\"\u003eBerriAI/litellm#36151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(bedrock): report uploaded size in the FileObject returned by managed batch uploads by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36392\"\u003eBerriAI/litellm#36392\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(batches): support AWS Bedrock batch cancellation via \u003ccode\u003eStopModelInvocationJob\u003c/code\u003e by \u003ca href=\"https://github.com/ArjunPakhan\"\u003e\u003ccode\u003e@​ArjunPakhan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/34087\"\u003eBerriAI/litellm#34087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Async Rust OCR Bridge and MCP OAuth UI Restore by \u003ca href=\"https://github.com/ArjunPakhan\"\u003e\u003ccode\u003e@​ArjunPakhan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/31453\"\u003eBerriAI/litellm#31453\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(batches): don't crash logging when a completed batch has no output file by \u003ca href=\"https://github.com/MUSE-CODE-SPACE\"\u003e\u003ccode\u003e@​MUSE-CODE-SPACE\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/34067\"\u003eBerriAI/litellm#34067\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(UI): add default model pin to complexity router UI by \u003ca href=\"https://github.com/tin-berri\"\u003e\u003ccode\u003e@​tin-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36615\"\u003eBerriAI/litellm#36615\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(ui): add Lite mixed-provider auto-router preset by \u003ca href=\"https://github.com/tin-berri\"\u003e\u003ccode\u003e@​tin-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/37068\"\u003eBerriAI/litellm#37068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(ui): link key info header to its user, creator, team, and organization by \u003ca href=\"https://github.com/ryan-crabbe-berri\"\u003e\u003ccode\u003e@​ryan-crabbe-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/37187\"\u003eBerriAI/litellm#37187\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(guardrails): scan text on /guardrails/apply_guardrail for Azure Content Safety by \u003ca href=\"https://github.com/yucheng-berri\"\u003e\u003ccode\u003e@​yucheng-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36894\"\u003eBerriAI/litellm#36894\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(bedrock): forward LiteLLM identity and metadata into Bedrock requestMetadata by \u003ca href=\"https://github.com/yassin-berriai\"\u003e\u003ccode\u003e@​yassin-berriai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36861\"\u003eBerriAI/litellm#36861\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(azure): rename max_tokens to max_completion_tokens for gpt-5-chat deployments by \u003ca href=\"https://github.com/yassin-berriai\"\u003e\u003ccode\u003e@​yassin-berriai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36857\"\u003eBerriAI/litellm#36857\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(bedrock): preserve cache token usage when invocationMetrics replace the usage block by \u003ca href=\"https://github.com/brian5021\"\u003e\u003ccode\u003e@​brian5021\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36878\"\u003eBerriAI/litellm#36878\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(proxy): registry caches stop per-request tag and end-user Postgres reads in auth by \u003ca href=\"https://github.com/ryan-crabbe-berri\"\u003e\u003ccode\u003e@​ryan-crabbe-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36801\"\u003eBerriAI/litellm#36801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest(e2e): replay a real tool-search assistant turn back to Bedrock Invoke by \u003ca href=\"https://github.com/yassin-berriai\"\u003e\u003ccode\u003e@​yassin-berriai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36856\"\u003eBerriAI/litellm#36856\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/BerriAI/litellm/commit/fa647f742d7baefe8eb1181899d9c81b41559772\"\u003e\u003ccode\u003efa647f7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/39048\"\u003e#39048\u003c/a\u003e from BerriAI/litellm_/docker-build-failure-9f6247\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/5892e30d4254376c77ac17040d27e2270cab65ae\"\u003e\u003ccode\u003e5892e30\u003c/code\u003e\u003c/a\u003e fix(docker): pin apk python to 3.13 in migrations image\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/91f1a5710064452bda834ae6446d891c90c46dd1\"\u003e\u003ccode\u003e91f1a57\u003c/code\u003e\u003c/a\u003e fix(docker): bump wolfi-base for glibc 2.44 and pin apk python to 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/d0c86678ed3c8951a2c47ed1b1fabcf8de65b553\"\u003e\u003ccode\u003ed0c8667\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/38862\"\u003e#38862\u003c/a\u003e from BerriAI/litellm_/litellm-e2e-rc-1-99-0-11cfd8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/da1d292dceeaf8f098ea9955eeaf7e7fb2a74a02\"\u003e\u003ccode\u003eda1d292\u003c/code\u003e\u003c/a\u003e test(e2e): measure the select popup after it settles instead of mid-flight\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/a2aecfea7f2905ed569ccc8d733efcff13c3074c\"\u003e\u003ccode\u003ea2aecfe\u003c/code\u003e\u003c/a\u003e fix(e2e): only the negative fallback assertion needs every replica to agree\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/ab1da05e5987816047f06f396288fee8d673db1c\"\u003e\u003ccode\u003eab1da05\u003c/code\u003e\u003c/a\u003e test(e2e): de-flake the cost-header cache read and the router fallback control\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/141185268450a248cb5bb251da3ac503273a1648\"\u003e\u003ccode\u003e1411852\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/38855\"\u003e#38855\u003c/a\u003e from BerriAI/litellm_/backport-38251-rc-1-99-0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/f0ee067aaa3a6d356a9806a4216dd524916ff231\"\u003e\u003ccode\u003ef0ee067\u003c/code\u003e\u003c/a\u003e fix(anthropic): translate tool_result document blocks in the /v1/messages bridge\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/4b281e7892937b9710e5a679d8fa75e8b0d99fac\"\u003e\u003ccode\u003e4b281e7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/38854\"\u003e#38854\u003c/a\u003e from BerriAI/litellm_backport_model_test_dialog_str...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/BerriAI/litellm/compare/v1.91.1...v1.99.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg[binary]` from 3.3.4 to 3.3.5\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg/blob/master/docs/news.rst\"\u003epsycopg[binary]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. currentmodule:: psycopg\u003c/p\u003e\n\u003cp\u003e.. index::\nsingle: Release notes\nsingle: News\u003c/p\u003e\n\u003ch1\u003e\u003ccode\u003epsycopg\u003c/code\u003e release notes\u003c/h1\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003ePsycopg 3.3.5\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDiscard prepared statements upon :sql:\u003ccode\u003eALTER *\u003c/code\u003e or \u003ccode\u003eDISCARD *\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1307](https://github.com/psycopg/psycopg/issues/1307)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!ProgrammingError\u003c/code\u003e when dumping non-\u003ccode\u003e!None\u003c/code\u003e values with\nno \u003ccode\u003e!NoneType\u003c/code\u003e dumper registered in python implementation (:ticket:\u003ccode\u003e[#1325](https://github.com/psycopg/psycopg/issues/1325)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!wait_selector\u003c/code\u003e wait function to not raise \u003ccode\u003e!KeyError\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1327](https://github.com/psycopg/psycopg/issues/1327)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!DataError\u003c/code\u003e messages leaking the literal \u003ccode\u003e{...}\u003c/code\u003e placeholder instead\nof the offending value when loading a pre-year-1 :sql:\u003ccode\u003etimestamp\u003c/code\u003e or a\nmalformed binary :sql:\u003ccode\u003ejsonb\u003c/code\u003e value (:ticket:\u003ccode\u003e[#1372](https://github.com/psycopg/psycopg/issues/1372)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e instead of \u003ccode\u003e!ValueError\u003c/code\u003e when \u003ccode\u003e~psycopg.rows.namedtuple_row\u003c/code\u003e\nreceives duplicate column names (:ticket:\u003ccode\u003e[#1348](https://github.com/psycopg/psycopg/issues/1348)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e on inconsistent copy data (:tickets:\u003ccode\u003e[#1359](https://github.com/psycopg/psycopg/issues/1359), [#1360](https://github.com/psycopg/psycopg/issues/1360)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eHandle client encodings aliases (:ticket:\u003ccode\u003e[#1363](https://github.com/psycopg/psycopg/issues/1363)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix building C extension with Cython 3.3.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.4\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix possible spurious connection timeout in systems with very long uptimes\nin C extension (:ticket:\u003ccode\u003e[#1280](https://github.com/psycopg/psycopg/issues/1280)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix client-side adaptation of enums whose name require quotes\n(:ticket:\u003ccode\u003e[#1298](https://github.com/psycopg/psycopg/issues/1298)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eConsistently populate \u003ccode\u003e~Cursor.statusmessage\u003c/code\u003e after \u003ccode\u003e~Cursor.executemany()\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1302](https://github.com/psycopg/psycopg/issues/1302)\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.3\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRetain \u003ccode\u003eError.pgconn\u003c/code\u003e when raising a single exception for multiple connection\nattempt errors (:ticket:\u003ccode\u003e[#1246](https://github.com/psycopg/psycopg/issues/1246)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eReturn a proper error when server sends \u003ccode\u003eErrorResponse\u003c/code\u003e for a \u003ccode\u003eSync\u003c/code\u003e after\na \u003ccode\u003eParse\u003c/code\u003e (:ticket:\u003ccode\u003e[#1260](https://github.com/psycopg/psycopg/issues/1260)\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/psycopg/psycopg/commit/ea542c9534cc9841d50450e0c156b549cc6c805a\"\u003e\u003ccode\u003eea542c9\u003c/code\u003e\u003c/a\u003e chore: bump psycopg package version to 3.3.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/8d31e4711c22b206d8863b9397b3b34f5b106e4d\"\u003e\u003ccode\u003e8d31e47\u003c/code\u003e\u003c/a\u003e chore(deps): bump the actions group across 1 directory with 4 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/268f863e0e8dbdbaf4f10616ebd14ff00edaeb51\"\u003e\u003ccode\u003e268f863\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1370\"\u003e#1370\u003c/a\u003e from Sanjays2402/fix/truncated-binary-copy-error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/a412fa4d682f035a9cf3c7886a5c95c15c64ba96\"\u003e\u003ccode\u003ea412fa4\u003c/code\u003e\u003c/a\u003e docs: put together different issues fixed around copy parsing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/f757307068aef06e439cf164915a3781acf483b5\"\u003e\u003ccode\u003ef757307\u003c/code\u003e\u003c/a\u003e fix: clearer error messages according to truncated copy message part\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/b1f17c44096b8fbc90836d9652d083f23c88e28d\"\u003e\u003ccode\u003eb1f17c4\u003c/code\u003e\u003c/a\u003e test: move existing COPY format parsing tests into a single module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/21eba573f9356276b2a3e0b7c1d86fad03f2872f\"\u003e\u003ccode\u003e21eba57\u003c/code\u003e\u003c/a\u003e test: drop useless parametrization of copy binary parsigh test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/6780e17bcee0b838dedd0aa9c1b6dcc563a50cec\"\u003e\u003ccode\u003e6780e17\u003c/code\u003e\u003c/a\u003e fix(copy): handle truncated binary row headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/2f2fcfbf35af4b80a4755fff75fe8b8f5e059193\"\u003e\u003ccode\u003e2f2fcfb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1364\"\u003e#1364\u003c/a\u003e from DylanYoung/fix_client_encoding_aliases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/ccc351ec3180969d105199012a017240492a43c0\"\u003e\u003ccode\u003eccc351e\u003c/code\u003e\u003c/a\u003e refactor: don't store the encodings raw table as a dict\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg/compare/3.3.4...3.3.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.1 to 7.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.16.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen combining files, now path separator slashes will automatically be converted to the local file system style. This makes it less necessary to define \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003eissue 2266\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ca href=\"https://coverage.readthedocs.io/en/latest/api_coverage.html#coverage.Coverage.switch_context\"\u003eCoverage.switch_context()\u003c/a\u003e method now returns the previous context.\u003c/li\u003e\n\u003cli\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file path when it was only meant to be replaced once, in the leading portion of the path. This is now fixed, in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003epull 2268\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixes to validation of options and configuration settings:\n\u003cul\u003e\n\u003cli\u003eNegative precision settings now always cause useful error messages (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003epull 2261\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing “Couldn’t use data file …: user-defined function raised exception” error. Now it raises a proper configuration error naming the bad regex, like other regex settings do (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003epull 2262\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eNon-string values in TOML configuration settings now produce a helpful error message instead of a traceback. This affects list settings whose elements aren’t strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e entry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the \u003ccode\u003e[paths]\u003c/code\u003e section (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003epull 2263\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like \u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can’t reach the subprocesses. The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as the entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e slipped through and failed later with “Can’t combine statement coverage data with branch data”. Each named concurrency library is now properly considered (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2270\"\u003epull 2270\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any measured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on Windows. The original extension is now restored on the annotated copy (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003epull 2265\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.16.0\"\u003ecoverage 7.16.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.16.0\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWhen combining files, now path separator slashes will automatically be\nconverted to the local file system style. This makes it less necessary to\ndefine \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems.\nFixes \u003ccode\u003eissue 2266\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe :meth:\u003ccode\u003e.Coverage.switch_context\u003c/code\u003e method now returns the previous context.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file\npath when it was only meant to be replaced once, in the leading portion of\nthe path. This is now fixed, in \u003ccode\u003epull 2268\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixes to validation of options and configuration settings:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNegative precision settings now always cause useful error messages (\u003ccode\u003epull 2261\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing \u0026quot;Couldn't use data file ...:\nuser-defined function raised exception\u0026quot; error. Now it raises a proper\nconfiguration error naming the bad regex, like other regex settings do\n(\u003ccode\u003epull 2262\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNon-string values in TOML configuration settings now produce a helpful\nerror message instead of a traceback.  This affects list settings whose\nelements aren't strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e\nentry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the\n\u003ccode\u003e[paths]\u003c/code\u003e section (\u003ccode\u003epull 2263\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like\n\u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can't\nreach the subprocesses.  The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as\nthe entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e\nslipped through and failed later with \u0026quot;Can't combine statement coverage\ndata with branch data\u0026quot;.  Each named concurrency library is now properly\nconsidered (\u003ccode\u003epull 2270\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any\nmeasured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on\nWindows.  The original extension is now restored on the annotated copy (\u003ccode\u003epull 2265\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2261: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003ecoveragepy/coveragepy#2261\u003c/a\u003e\n.. _pull 2262: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003ecoveragepy/coveragepy#2262\u003c/a\u003e\n.. _pull 2263: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003ecoveragepy/coveragepy#2263\u003c/a\u003e\n.. _pull 2265: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003ecoveragepy/coveragepy#2265\u003c/a\u003e\n.. _issue 2266: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003ecoveragepy/coveragepy#2266\u003c/a\u003e\n.. _pull 2268: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003ecoveragepy/coveragepy#2268\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/coveragepy/coveragepy/commit/3e9fc1653ef31089d02eb7618b9d9ac9414378fc\"\u003e\u003ccode\u003e3e9fc16\u003c/code\u003e\u003c/a\u003e docs: prep for 7.16.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/38be8d13afee6b6525492fc375c739cdfb675e9b\"\u003e\u003ccode\u003e38be8d1\u003c/code\u003e\u003c/a\u003e build: control check-manifest explicitly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/8eb1266ead5c6d356d3437637a509ff86b566253\"\u003e\u003ccode\u003e8eb1266\u003c/code\u003e\u003c/a\u003e docs(build): no longer commit sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1a8b3fa57d56bb70bad62c93d224c18a0fbaae6f\"\u003e\u003ccode\u003e1a8b3fa\u003c/code\u003e\u003c/a\u003e docs: remove sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/aeaa79b812d1bc637ebb5582ab12c076e192c87e\"\u003e\u003ccode\u003eaeaa79b\u003c/code\u003e\u003c/a\u003e docs: linklint is now sphinx-linklint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d5eaf3f6d38f58746bc69e87e64c0b0277a9077d\"\u003e\u003ccode\u003ed5eaf3f\u003c/code\u003e\u003c/a\u003e test: a branchless way to re-add extensions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/57e52fd431cecc1ca03de2c5b1288e0b330c2ef4\"\u003e\u003ccode\u003e57e52fd\u003c/code\u003e\u003c/a\u003e docs: adjust CHANGES for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b9d304d77f7ce3d55df3a46339dbc56d1f49df58\"\u003e\u003ccode\u003eb9d304d\u003c/code\u003e\u003c/a\u003e fix: check for multiprocessing in a --concurrency list (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a6ef9284afbc7d1f392821864b64ddbda0051fc5\"\u003e\u003ccode\u003ea6ef928\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/070461fcfde0437b5b778c2c2a72e433a0a391aa\"\u003e\u003ccode\u003e070461f\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 4 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2271\"\u003e#2271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.1...7.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ek...\n\n_Description has been truncated_","html_url":"https://github.com/KScaesar/MaiAgent2026/pull/22","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/KScaesar%2FMaiAgent2026/issues/22","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/22/packages"},{"uuid":"5343309561","node_id":"PR_kwDOOke-mM8AAAABCI3CCw","number":22,"state":"closed","title":"Bump the python group across 1 directory with 15 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-07T01:58:05.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-04T01:56:54.000Z","updated_at":"2026-09-07T01:58:07.000Z","time_to_close":259271,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":15,"packages":[{"name":"django","old_version":"6.0.7","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"gevent","old_version":"26.7.0","new_version":"26.8.0","repository_url":"https://github.com/gevent/gevent"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.2.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"sentry-sdk","old_version":"2.66.1","new_version":"2.68.1","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djangorestframework-stubs","old_version":"3.17.1","new_version":"3.18.1","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.22","new_version":"0.16.5","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 15 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.7` | `6.1` |\n| [django-anymail[mailgun]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [gevent](https://github.com/gevent/gevent) | `26.7.0` | `26.8.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.2.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.66.1` | `2.68.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.1` | `3.18.1` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.22` | `0.16.5` |\n\n\nUpdates `django` from 6.0.7 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.7...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[mailgun]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[mailgun]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[mailgun]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gevent` from 26.7.0 to 26.8.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/4f684105f537eeceb9988adbfe81420a1f28d9a0\"\u003e\u003ccode\u003e4f68410\u003c/code\u003e\u003c/a\u003e Preparing release 26.8.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/10489c56d3b03caae5be00bc46996a0180ab3d8c\"\u003e\u003ccode\u003e10489c5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2199\"\u003e#2199\u003c/a\u003e from florentinl/florentin.labelle/fix/hubless-thread...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/d4f5f098c5d6655e9700336ed6f15e924a7fd142\"\u003e\u003ccode\u003ed4f5f09\u003c/code\u003e\u003c/a\u003e Document the args[0] cross-thread wakeup mechanism\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/9b049915e8e308e4286f922fd51baf9d92187a88\"\u003e\u003ccode\u003e9b04991\u003c/code\u003e\u003c/a\u003e Run test_cross_thread_callback_can_run_before_scheduling_returns on all backends\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/ce7996d7048d3555be2869cc6172d47e332efb58\"\u003e\u003ccode\u003ece7996d\u003c/code\u003e\u003c/a\u003e Address review comments: document cross-thread race, drop unneeded cpdef\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/5288a6eec90ca63f9658b44d67f14fbdfe07259d\"\u003e\u003ccode\u003e5288a6e\u003c/code\u003e\u003c/a\u003e Add missing \u003ca href=\"https://github.com/ignores\"\u003e\u003ccode\u003e@​ignores\u003c/code\u003e\u003c/a\u003e_leakcheck to new cross-thread test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/c72eda095d99e82ca0c767afe56baecbc4c131a2\"\u003e\u003ccode\u003ec72eda0\u003c/code\u003e\u003c/a\u003e Fix cross-thread notifier scheduling race\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/908b93730ffef5cee0594e4482b3a43b476c43a4\"\u003e\u003ccode\u003e908b937\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2195\"\u003e#2195\u003c/a\u003e from ddorian/fix-popen-exit-reentrant-close\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/b58795f8a659e767b0317cd199d68f273b742167\"\u003e\u003ccode\u003eb58795f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2191\"\u003e#2191\u003c/a\u003e from ddorian/fix-1865-global-shutdown-lock\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/ede2e71a859198b96a22f4c683fa210e750406e6\"\u003e\u003ccode\u003eede2e71\u003c/code\u003e\u003c/a\u003e Always use 'versionchanged:: NEXT' to let the release machinery fill in the c...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gevent/gevent/compare/26.7.0...26.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.2.0\u003c/h2\u003e\n\u003cp\u003eCleartext HTTP/2 lands, and an HTTP/2 security fix.\u003c/p\u003e\n\u003ch2\u003eCleartext HTTP/2 (h2c)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp2_cleartext\u003c/code\u003e accepts \u003ccode\u003eprior-knowledge\u003c/code\u003e, \u003ccode\u003eupgrade\u003c/code\u003e, \u003ccode\u003eboth\u003c/code\u003e or \u003ccode\u003eoff\u003c/code\u003e (the\ndefault). Prior knowledge serves a connection that opens with the HTTP/2\npreface; \u003ccode\u003eupgrade\u003c/code\u003e honours an HTTP/1.1 \u003ccode\u003eUpgrade: h2c\u003c/code\u003e request. Both work on the\ngthread, gevent and asgi workers.\u003c/p\u003e\n\u003cp\u003eThis is for deployments where TLS is terminated by a proxy that speaks HTTP/2\nupstream, so the hop into gunicorn no longer drops to HTTP/1.1. Only peers in\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e are considered; everyone else is served HTTP/1.x exactly\nas if the setting were off. Each mechanism is enabled separately, so turning one\non does not turn the other on.\u003c/p\u003e\n\u003cp\u003eDo not expose a cleartext HTTP/2 port to the internet.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eHTTP2Request\u003c/code\u003e built its headers straight from the stream, so nothing the HTTP/1\npath enforces applied over HTTP/2: the underscore and \u003ccode\u003eheader_map\u003c/code\u003e policy,\nduplicate \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e, control characters in values, and the\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e trust gate. An untrusted client could set \u003ccode\u003eSCRIPT_NAME\u003c/code\u003e\nand forge \u003ccode\u003eHTTP_*\u003c/code\u003e entries in the WSGI environ, and decide \u003ccode\u003ewsgi.url_scheme\u003c/code\u003e\nthrough \u003ccode\u003e:scheme\u003c/code\u003e. Both request classes now share one policy mixin, and the\nscheme comes from the transport.\u003c/p\u003e\n\u003cp\u003eIf you serve HTTP/2, this is the reason to upgrade.\u003c/p\u003e\n\u003ch2\u003eOther HTTP/2 fixes\u003c/h2\u003e\n\u003cp\u003eWSGI responses were buffered whole before anything was sent; they stream now.\nHEAD, 204 and 304 no longer carry a body. Events read while blocked on a\nflow-control window were discarded, losing requests and body data outright.\n\u003ccode\u003esendfile()\u003c/code\u003e is refused on HTTP/2 responses rather than bypassing framing.\u003c/p\u003e\n\u003ch2\u003eRequest bodies dropped on Upgrade requests\u003c/h2\u003e\n\u003cp\u003eOn the ASGI worker with the fast parser, any request carrying an \u003ccode\u003eUpgrade\u003c/code\u003e\nheader reached the application with an empty body, whatever the header's value\nand with HTTP/2 switched off entirely. Fixed in \u003ccode\u003egunicorn_h1c\u003c/code\u003e 0.6.9, which the\n\u003ccode\u003efast\u003c/code\u003e extra now requires.\u003c/p\u003e\n\u003cp\u003eFull changelog: \u003ca href=\"https://gunicorn.org/news/\"\u003ehttps://gunicorn.org/news/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/36f2a3c1b80dfa41d70859d12c5bfbbdc23a3c38\"\u003e\u003ccode\u003e36f2a3c\u003c/code\u003e\u003c/a\u003e gunicorn 26.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbba3505f423bfb91af3a87e49ed9d232f39a8fe\"\u003e\u003ccode\u003ecbba350\u003c/code\u003e\u003c/a\u003e test: cover the h2c edge paths that had none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/988541112ebcf3f795c020fc394aa7eed75f9f53\"\u003e\u003ccode\u003e9885411\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3703\"\u003e#3703\u003c/a\u003e from cormier/fix-inconsistency-in-control-socket-docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/86f0919806a2d4d4cce376cc2088352e7643b139\"\u003e\u003ccode\u003e86f0919\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3704\"\u003e#3704\u003c/a\u003e from methane/doc-wsgi-h1c\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/585355122efe736946b977c5605e404ff2d6ddd4\"\u003e\u003ccode\u003e5853551\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3712\"\u003e#3712\u003c/a\u003e from Rotzbua/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7bce87e2aa29a4a794eb2b113ff811cad6a80736\"\u003e\u003ccode\u003e7bce87e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3700\"\u003e#3700\u003c/a\u003e from benoitc/fix/sponsor-logo-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/972dfb03b110c430712c32a3d92ef6397ff8eff6\"\u003e\u003ccode\u003e972dfb0\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3690\"\u003e#3690\u003c/a\u003e from melbinjp/docs/contributing-settings-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7b3f16be8d9cc051538b7f0b58b236b37c9550f8\"\u003e\u003ccode\u003e7b3f16b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3711\"\u003e#3711\u003c/a\u003e from benoitc/docs/http2-changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5bf237c0c7ef5bcdc63046645a17d6bafd609a34\"\u003e\u003ccode\u003e5bf237c\u003c/code\u003e\u003c/a\u003e http2: require gunicorn_h1c 0.6.9 and drop the upgrade body workaround\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7cf03385c574228e28c4952fd410ed2df02acc94\"\u003e\u003ccode\u003e7cf0338\u003c/code\u003e\u003c/a\u003e test: skip the fast-parser cases when gunicorn_h1c is absent\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.66.1 to 2.68.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.1\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eenable_logs\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e(logs) Don't stop sending auto-collected logs when \u003ccode\u003eenable_logs=True\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7237\"\u003e#7237\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIf you have \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e, our logging integrations for the standard library logging module as well as Loguru will auto-collect logs and send them to Sentry as Sentry logs by default, preserving old behavior. Turning automatic collection off for a specific integration can still be achieved using the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration option.\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nenable_logs=True,\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=False),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003ePlease note that the \u003ccode\u003eenable_logs\u003c/code\u003e option is deprecated and will be removed in the next major release. The \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API now works regardless of it, and auto-collection can be opted into via the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration-level options, which are \u003ccode\u003eFalse\u003c/code\u003e by default, unless you have \u003ccode\u003eenable_logs=True\u003c/code\u003e. We've added this compatibility layer to make the transition to a \u003ccode\u003eenable_logs\u003c/code\u003e-free world easier.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Add \u003ccode\u003efailed_request_status_codes\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7140\"\u003e#7140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(anthropic) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7207\"\u003e#7207\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(google_genai) Gate streaming \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7210\"\u003e#7210\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langchain) Use \u003ccode\u003egen_ai.tool.definitions\u003c/code\u003e attribute when data collection is enabled by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7204\"\u003e#7204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langgraph,huggingface_hub) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7208\"\u003e#7208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7205\"\u003e#7205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai_agents) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7209\"\u003e#7209\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003c/code\u003e\u003c/pre\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/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.1\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eenable_logs\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e(logs) Don't stop sending auto-collected logs when \u003ccode\u003eenable_logs=True\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7237\"\u003e#7237\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIf you have \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e, our logging integrations for the standard library logging module as well as Loguru will auto-collect logs and send them to Sentry as Sentry logs by default, preserving old behavior. Turning automatic collection off for a specific integration can still be achieved using the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration option.\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nenable_logs=True,\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=False),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003ePlease note that the \u003ccode\u003eenable_logs\u003c/code\u003e option is deprecated and will be removed in the next major release. The \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API now works regardless of it, and auto-collection can be opted into via the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration-level options, which are \u003ccode\u003eFalse\u003c/code\u003e by default, unless you have \u003ccode\u003eenable_logs=True\u003c/code\u003e. We've added this compatibility layer to make the transition to a \u003ccode\u003eenable_logs\u003c/code\u003e-free world easier.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Add \u003ccode\u003efailed_request_status_codes\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7140\"\u003e#7140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(anthropic) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7207\"\u003e#7207\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(google_genai) Gate streaming \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7210\"\u003e#7210\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langchain) Use \u003ccode\u003egen_ai.tool.definitions\u003c/code\u003e attribute when data collection is enabled by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7204\"\u003e#7204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langgraph,huggingface_hub) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7208\"\u003e#7208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7205\"\u003e#7205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai_agents) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7209\"\u003e#7209\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003e\u003c/code\u003e\u003c/pre\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/getsentry/sentry-python/commit/98f7d91809e71ed5a7b827f8b4f9acfc7ac1bae0\"\u003e\u003ccode\u003e98f7d91\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/8f886ff9b784da7c45f51a0dfbe42c7838e68c42\"\u003e\u003ccode\u003e8f886ff\u003c/code\u003e\u003c/a\u003e release: 2.68.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/df4ec02a1b4bfc50f6218908fe497dd0ec566801\"\u003e\u003ccode\u003edf4ec02\u003c/code\u003e\u003c/a\u003e fix(logs): Don't stop sending auto-collected logs when \u003ccode\u003eenable_logs=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e32031816394208bce58c050ff563bfde8d7b228\"\u003e\u003ccode\u003ee320318\u003c/code\u003e\u003c/a\u003e test(pyramid): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7218\"\u003e#7218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/7b8a3857122d0a9c69aca784bd730bb0dcf729f6\"\u003e\u003ccode\u003e7b8a385\u003c/code\u003e\u003c/a\u003e test(bottle): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7217\"\u003e#7217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/cbcadc9cba1295fb78a90a2823d6fbd36bce1ba3\"\u003e\u003ccode\u003ecbcadc9\u003c/code\u003e\u003c/a\u003e test(sanic): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7216\"\u003e#7216\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e42c798e0cd549b42bc748a53c7e16c2763ec427\"\u003e\u003ccode\u003ee42c798\u003c/code\u003e\u003c/a\u003e feat(tornado): Gate request body collection on data_collection option (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7215\"\u003e#7215\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/d05bb60e0d9ecc66b2cc8b62ba0cfc0eaa343088\"\u003e\u003ccode\u003ed05bb60\u003c/code\u003e\u003c/a\u003e test(django): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7213\"\u003e#7213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/bcce67b1a6869229a0c74bcd93e4b8bcfde5cc7a\"\u003e\u003ccode\u003ebcce67b\u003c/code\u003e\u003c/a\u003e feat(wsgi): Gate request body collection on data_collection option (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7212\"\u003e#7212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/41220c4adba83c307aabae28057db830808adb3a\"\u003e\u003ccode\u003e41220c4\u003c/code\u003e\u003c/a\u003e fix(google_genai): Gate streaming \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, no...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.66.1...2.68.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.7 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.7...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field\u003c/code\u003e corrupting concatenated keys (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/02a46831ceb213421761f312e1368fa7b7e796d9\"\u003e\u003ccode\u003e02a4683\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etestcase_databases\u003c/code\u003e mapping of \u003ccode\u003emulti_db = False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/bc85eb958b63b752cbd7454d6378e51ca50d891d\"\u003e\u003ccode\u003ebc85eb9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_decorators\u003c/code\u003e hoisting values above their definitions (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/4eb5abf3734ba10c96dd53abdf98e50c78c4adae\"\u003e\u003ccode\u003e4eb5abf\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_register\u003c/code\u003e referencing models defined after the admin class (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d782084a4fe43286d6b4b2d11676efad0a1356cb\"\u003e\u003ccode\u003ed782084\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003esettings_storages\u003c/code\u003e erasing settings referenced elsewhere (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/2f3eb7571f87ae8c62389ac8f977935f81fbe58e\"\u003e\u003ccode\u003e2f3eb75\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etest_http_headers\u003c/code\u003e precedence when merging into \u003ccode\u003eheaders=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d750615a98098ff0c44477041932a04089d5aa47\"\u003e\u003ccode\u003ed750615\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003estringagg\u003c/code\u003e moving import despite bare \u003ccode\u003eStringAgg\u003c/code\u003e references (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/49cb8b9c2297d329a8f858beb54fb34e7274830a\"\u003e\u003ccode\u003e49cb8b9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eutils_timezone\u003c/code\u003e matching aliased \u003ccode\u003eutc\u003c/code\u003e imports (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-upgrade/compare/1.31.1...1.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframe...\n\n_Description has been truncated_","html_url":"https://github.com/mpeyfuss/drf-template/pull/22","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpeyfuss%2Fdrf-template/issues/22","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/22/packages"},{"uuid":"5342228020","node_id":"PR_kwDOTbcjQc8AAAABCIBcdQ","number":42,"state":"closed","title":"build(deps): bump the python group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T22:47:41.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-03T22:50:28.000Z","updated_at":"2026-09-04T22:47:42.000Z","time_to_close":86233,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python","update_count":16,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.2.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"psycopg","old_version":"3.3.4","new_version":"3.3.5"},{"name":"sentry-sdk","old_version":"2.66.1","new_version":"2.68.1","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"uvicorn","old_version":"0.52.0","new_version":"0.52.4"},{"name":"coverage","old_version":"7.15.2","new_version":"7.16.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djlint","old_version":"1.43.1","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.1","new_version":"0.16.5","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.2.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [psycopg[c]](https://github.com/psycopg/psycopg) | `3.3.4` | `3.3.5` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.66.1` | `2.68.1` |\n| [uvicorn[standard]](https://github.com/Kludex/uvicorn) | `0.52.0` | `0.52.4` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.2` | `7.16.0` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.43.1` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.1` | `0.16.5` |\n\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.2.0\u003c/h2\u003e\n\u003cp\u003eCleartext HTTP/2 lands, and an HTTP/2 security fix.\u003c/p\u003e\n\u003ch2\u003eCleartext HTTP/2 (h2c)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp2_cleartext\u003c/code\u003e accepts \u003ccode\u003eprior-knowledge\u003c/code\u003e, \u003ccode\u003eupgrade\u003c/code\u003e, \u003ccode\u003eboth\u003c/code\u003e or \u003ccode\u003eoff\u003c/code\u003e (the\ndefault). Prior knowledge serves a connection that opens with the HTTP/2\npreface; \u003ccode\u003eupgrade\u003c/code\u003e honours an HTTP/1.1 \u003ccode\u003eUpgrade: h2c\u003c/code\u003e request. Both work on the\ngthread, gevent and asgi workers.\u003c/p\u003e\n\u003cp\u003eThis is for deployments where TLS is terminated by a proxy that speaks HTTP/2\nupstream, so the hop into gunicorn no longer drops to HTTP/1.1. Only peers in\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e are considered; everyone else is served HTTP/1.x exactly\nas if the setting were off. Each mechanism is enabled separately, so turning one\non does not turn the other on.\u003c/p\u003e\n\u003cp\u003eDo not expose a cleartext HTTP/2 port to the internet.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eHTTP2Request\u003c/code\u003e built its headers straight from the stream, so nothing the HTTP/1\npath enforces applied over HTTP/2: the underscore and \u003ccode\u003eheader_map\u003c/code\u003e policy,\nduplicate \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e, control characters in values, and the\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e trust gate. An untrusted client could set \u003ccode\u003eSCRIPT_NAME\u003c/code\u003e\nand forge \u003ccode\u003eHTTP_*\u003c/code\u003e entries in the WSGI environ, and decide \u003ccode\u003ewsgi.url_scheme\u003c/code\u003e\nthrough \u003ccode\u003e:scheme\u003c/code\u003e. Both request classes now share one policy mixin, and the\nscheme comes from the transport.\u003c/p\u003e\n\u003cp\u003eIf you serve HTTP/2, this is the reason to upgrade.\u003c/p\u003e\n\u003ch2\u003eOther HTTP/2 fixes\u003c/h2\u003e\n\u003cp\u003eWSGI responses were buffered whole before anything was sent; they stream now.\nHEAD, 204 and 304 no longer carry a body. Events read while blocked on a\nflow-control window were discarded, losing requests and body data outright.\n\u003ccode\u003esendfile()\u003c/code\u003e is refused on HTTP/2 responses rather than bypassing framing.\u003c/p\u003e\n\u003ch2\u003eRequest bodies dropped on Upgrade requests\u003c/h2\u003e\n\u003cp\u003eOn the ASGI worker with the fast parser, any request carrying an \u003ccode\u003eUpgrade\u003c/code\u003e\nheader reached the application with an empty body, whatever the header's value\nand with HTTP/2 switched off entirely. Fixed in \u003ccode\u003egunicorn_h1c\u003c/code\u003e 0.6.9, which the\n\u003ccode\u003efast\u003c/code\u003e extra now requires.\u003c/p\u003e\n\u003cp\u003eFull changelog: \u003ca href=\"https://gunicorn.org/news/\"\u003ehttps://gunicorn.org/news/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/36f2a3c1b80dfa41d70859d12c5bfbbdc23a3c38\"\u003e\u003ccode\u003e36f2a3c\u003c/code\u003e\u003c/a\u003e gunicorn 26.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbba3505f423bfb91af3a87e49ed9d232f39a8fe\"\u003e\u003ccode\u003ecbba350\u003c/code\u003e\u003c/a\u003e test: cover the h2c edge paths that had none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/988541112ebcf3f795c020fc394aa7eed75f9f53\"\u003e\u003ccode\u003e9885411\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3703\"\u003e#3703\u003c/a\u003e from cormier/fix-inconsistency-in-control-socket-docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/86f0919806a2d4d4cce376cc2088352e7643b139\"\u003e\u003ccode\u003e86f0919\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3704\"\u003e#3704\u003c/a\u003e from methane/doc-wsgi-h1c\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/585355122efe736946b977c5605e404ff2d6ddd4\"\u003e\u003ccode\u003e5853551\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3712\"\u003e#3712\u003c/a\u003e from Rotzbua/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7bce87e2aa29a4a794eb2b113ff811cad6a80736\"\u003e\u003ccode\u003e7bce87e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3700\"\u003e#3700\u003c/a\u003e from benoitc/fix/sponsor-logo-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/972dfb03b110c430712c32a3d92ef6397ff8eff6\"\u003e\u003ccode\u003e972dfb0\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3690\"\u003e#3690\u003c/a\u003e from melbinjp/docs/contributing-settings-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7b3f16be8d9cc051538b7f0b58b236b37c9550f8\"\u003e\u003ccode\u003e7b3f16b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3711\"\u003e#3711\u003c/a\u003e from benoitc/docs/http2-changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5bf237c0c7ef5bcdc63046645a17d6bafd609a34\"\u003e\u003ccode\u003e5bf237c\u003c/code\u003e\u003c/a\u003e http2: require gunicorn_h1c 0.6.9 and drop the upgrade body workaround\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7cf03385c574228e28c4952fd410ed2df02acc94\"\u003e\u003ccode\u003e7cf0338\u003c/code\u003e\u003c/a\u003e test: skip the fast-parser cases when gunicorn_h1c is absent\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg[c]` from 3.3.4 to 3.3.5\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg/blob/master/docs/news.rst\"\u003epsycopg[c]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. currentmodule:: psycopg\u003c/p\u003e\n\u003cp\u003e.. index::\nsingle: Release notes\nsingle: News\u003c/p\u003e\n\u003ch1\u003e\u003ccode\u003epsycopg\u003c/code\u003e release notes\u003c/h1\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003ePsycopg 3.3.5\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDiscard prepared statements upon :sql:\u003ccode\u003eALTER *\u003c/code\u003e or \u003ccode\u003eDISCARD *\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1307](https://github.com/psycopg/psycopg/issues/1307)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!ProgrammingError\u003c/code\u003e when dumping non-\u003ccode\u003e!None\u003c/code\u003e values with\nno \u003ccode\u003e!NoneType\u003c/code\u003e dumper registered in python implementation (:ticket:\u003ccode\u003e[#1325](https://github.com/psycopg/psycopg/issues/1325)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!wait_selector\u003c/code\u003e wait function to not raise \u003ccode\u003e!KeyError\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1327](https://github.com/psycopg/psycopg/issues/1327)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!DataError\u003c/code\u003e messages leaking the literal \u003ccode\u003e{...}\u003c/code\u003e placeholder instead\nof the offending value when loading a pre-year-1 :sql:\u003ccode\u003etimestamp\u003c/code\u003e or a\nmalformed binary :sql:\u003ccode\u003ejsonb\u003c/code\u003e value (:ticket:\u003ccode\u003e[#1372](https://github.com/psycopg/psycopg/issues/1372)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e instead of \u003ccode\u003e!ValueError\u003c/code\u003e when \u003ccode\u003e~psycopg.rows.namedtuple_row\u003c/code\u003e\nreceives duplicate column names (:ticket:\u003ccode\u003e[#1348](https://github.com/psycopg/psycopg/issues/1348)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e on inconsistent copy data (:tickets:\u003ccode\u003e[#1359](https://github.com/psycopg/psycopg/issues/1359), [#1360](https://github.com/psycopg/psycopg/issues/1360)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eHandle client encodings aliases (:ticket:\u003ccode\u003e[#1363](https://github.com/psycopg/psycopg/issues/1363)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix building C extension with Cython 3.3.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.4\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix possible spurious connection timeout in systems with very long uptimes\nin C extension (:ticket:\u003ccode\u003e[#1280](https://github.com/psycopg/psycopg/issues/1280)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix client-side adaptation of enums whose name require quotes\n(:ticket:\u003ccode\u003e[#1298](https://github.com/psycopg/psycopg/issues/1298)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eConsistently populate \u003ccode\u003e~Cursor.statusmessage\u003c/code\u003e after \u003ccode\u003e~Cursor.executemany()\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1302](https://github.com/psycopg/psycopg/issues/1302)\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.3\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRetain \u003ccode\u003eError.pgconn\u003c/code\u003e when raising a single exception for multiple connection\nattempt errors (:ticket:\u003ccode\u003e[#1246](https://github.com/psycopg/psycopg/issues/1246)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eReturn a proper error when server sends \u003ccode\u003eErrorResponse\u003c/code\u003e for a \u003ccode\u003eSync\u003c/code\u003e after\na \u003ccode\u003eParse\u003c/code\u003e (:ticket:\u003ccode\u003e[#1260](https://github.com/psycopg/psycopg/issues/1260)\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/psycopg/psycopg/commit/ea542c9534cc9841d50450e0c156b549cc6c805a\"\u003e\u003ccode\u003eea542c9\u003c/code\u003e\u003c/a\u003e chore: bump psycopg package version to 3.3.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/8d31e4711c22b206d8863b9397b3b34f5b106e4d\"\u003e\u003ccode\u003e8d31e47\u003c/code\u003e\u003c/a\u003e chore(deps): bump the actions group across 1 directory with 4 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/268f863e0e8dbdbaf4f10616ebd14ff00edaeb51\"\u003e\u003ccode\u003e268f863\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1370\"\u003e#1370\u003c/a\u003e from Sanjays2402/fix/truncated-binary-copy-error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/a412fa4d682f035a9cf3c7886a5c95c15c64ba96\"\u003e\u003ccode\u003ea412fa4\u003c/code\u003e\u003c/a\u003e docs: put together different issues fixed around copy parsing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/f757307068aef06e439cf164915a3781acf483b5\"\u003e\u003ccode\u003ef757307\u003c/code\u003e\u003c/a\u003e fix: clearer error messages according to truncated copy message part\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/b1f17c44096b8fbc90836d9652d083f23c88e28d\"\u003e\u003ccode\u003eb1f17c4\u003c/code\u003e\u003c/a\u003e test: move existing COPY format parsing tests into a single module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/21eba573f9356276b2a3e0b7c1d86fad03f2872f\"\u003e\u003ccode\u003e21eba57\u003c/code\u003e\u003c/a\u003e test: drop useless parametrization of copy binary parsigh test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/6780e17bcee0b838dedd0aa9c1b6dcc563a50cec\"\u003e\u003ccode\u003e6780e17\u003c/code\u003e\u003c/a\u003e fix(copy): handle truncated binary row headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/2f2fcfbf35af4b80a4755fff75fe8b8f5e059193\"\u003e\u003ccode\u003e2f2fcfb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1364\"\u003e#1364\u003c/a\u003e from DylanYoung/fix_client_encoding_aliases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/ccc351ec3180969d105199012a017240492a43c0\"\u003e\u003ccode\u003eccc351e\u003c/code\u003e\u003c/a\u003e refactor: don't store the encodings raw table as a dict\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg/compare/3.3.4...3.3.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.66.1 to 2.68.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.1\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eenable_logs\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e(logs) Don't stop sending auto-collected logs when \u003ccode\u003eenable_logs=True\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7237\"\u003e#7237\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIf you have \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e, our logging integrations for the standard library logging module as well as Loguru will auto-collect logs and send them to Sentry as Sentry logs by default, preserving old behavior. Turning automatic collection off for a specific integration can still be achieved using the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration option.\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nenable_logs=True,\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=False),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003ePlease note that the \u003ccode\u003eenable_logs\u003c/code\u003e option is deprecated and will be removed in the next major release. The \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API now works regardless of it, and auto-collection can be opted into via the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration-level options, which are \u003ccode\u003eFalse\u003c/code\u003e by default, unless you have \u003ccode\u003eenable_logs=True\u003c/code\u003e. We've added this compatibility layer to make the transition to a \u003ccode\u003eenable_logs\u003c/code\u003e-free world easier.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Add \u003ccode\u003efailed_request_status_codes\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7140\"\u003e#7140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(anthropic) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7207\"\u003e#7207\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(google_genai) Gate streaming \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7210\"\u003e#7210\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langchain) Use \u003ccode\u003egen_ai.tool.definitions\u003c/code\u003e attribute when data collection is enabled by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7204\"\u003e#7204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langgraph,huggingface_hub) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7208\"\u003e#7208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7205\"\u003e#7205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai_agents) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7209\"\u003e#7209\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003c/code\u003e\u003c/pre\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/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.1\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eenable_logs\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e(logs) Don't stop sending auto-collected logs when \u003ccode\u003eenable_logs=True\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7237\"\u003e#7237\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIf you have \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e, our logging integrations for the standard library logging module as well as Loguru will auto-collect logs and send them to Sentry as Sentry logs by default, preserving old behavior. Turning automatic collection off for a specific integration can still be achieved using the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration option.\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nenable_logs=True,\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=False),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003ePlease note that the \u003ccode\u003eenable_logs\u003c/code\u003e option is deprecated and will be removed in the next major release. The \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API now works regardless of it, and auto-collection can be opted into via the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration-level options, which are \u003ccode\u003eFalse\u003c/code\u003e by default, unless you have \u003ccode\u003eenable_logs=True\u003c/code\u003e. We've added this compatibility layer to make the transition to a \u003ccode\u003eenable_logs\u003c/code\u003e-free world easier.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Add \u003ccode\u003efailed_request_status_codes\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7140\"\u003e#7140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(anthropic) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7207\"\u003e#7207\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(google_genai) Gate streaming \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7210\"\u003e#7210\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langchain) Use \u003ccode\u003egen_ai.tool.definitions\u003c/code\u003e attribute when data collection is enabled by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7204\"\u003e#7204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langgraph,huggingface_hub) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7208\"\u003e#7208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7205\"\u003e#7205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai_agents) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7209\"\u003e#7209\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003e\u003c/code\u003e\u003c/pre\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/getsentry/sentry-python/commit/98f7d91809e71ed5a7b827f8b4f9acfc7ac1bae0\"\u003e\u003ccode\u003e98f7d91\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/8f886ff9b784da7c45f51a0dfbe42c7838e68c42\"\u003e\u003ccode\u003e8f886ff\u003c/code\u003e\u003c/a\u003e release: 2.68.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/df4ec02a1b4bfc50f6218908fe497dd0ec566801\"\u003e\u003ccode\u003edf4ec02\u003c/code\u003e\u003c/a\u003e fix(logs): Don't stop sending auto-collected logs when \u003ccode\u003eenable_logs=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e32031816394208bce58c050ff563bfde8d7b228\"\u003e\u003ccode\u003ee320318\u003c/code\u003e\u003c/a\u003e test(pyramid): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7218\"\u003e#7218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/7b8a3857122d0a9c69aca784bd730bb0dcf729f6\"\u003e\u003ccode\u003e7b8a385\u003c/code\u003e\u003c/a\u003e test(bottle): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7217\"\u003e#7217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/cbcadc9cba1295fb78a90a2823d6fbd36bce1ba3\"\u003e\u003ccode\u003ecbcadc9\u003c/code\u003e\u003c/a\u003e test(sanic): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7216\"\u003e#7216\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e42c798e0cd549b42bc748a53c7e16c2763ec427\"\u003e\u003ccode\u003ee42c798\u003c/code\u003e\u003c/a\u003e feat(tornado): Gate request body collection on data_collection option (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7215\"\u003e#7215\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/d05bb60e0d9ecc66b2cc8b62ba0cfc0eaa343088\"\u003e\u003ccode\u003ed05bb60\u003c/code\u003e\u003c/a\u003e test(django): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7213\"\u003e#7213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/bcce67b1a6869229a0c74bcd93e4b8bcfde5cc7a\"\u003e\u003ccode\u003ebcce67b\u003c/code\u003e\u003c/a\u003e feat(wsgi): Gate request body collection on data_collection option (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7212\"\u003e#7212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/41220c4adba83c307aabae28057db830808adb3a\"\u003e\u003ccode\u003e41220c4\u003c/code\u003e\u003c/a\u003e fix(google_genai): Gate streaming \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, no...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.66.1...2.68.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn[standard]` from 0.52.0 to 0.52.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn[standard]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.52.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComplete the closing handshake on server-initiated WebSocket closes in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e and \u003ccode\u003ewsproto\u003c/code\u003e implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing write flow control to the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, preventing data truncation on server-initiated closes with large in-flight payloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3048\"\u003e#3048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle connection loss while a WebSocket write is waiting on backpressure (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3050\"\u003e#3050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eContent-Type\u003c/code\u003e and \u003ccode\u003eContent-Length\u003c/code\u003e headers from WebSocket denial responses on the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, and deliver non-UTF-8 denial bodies intact (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3041\"\u003e#3041\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.0...0.52.1\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.0...0.52.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn[standard]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.52.4 (August 18, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.3 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.2 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.1 (August 1, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComplete the closing handshake on server-initiated WebSocket closes in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e and \u003ccode\u003ewsproto\u003c/code\u003e implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing write flow control to the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, preventing data truncation on server-initiated closes with large in-flight payloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3048\"\u003e#3048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle connection loss while a WebSocket write is waiting on backpressure (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3050\"\u003e#3050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eContent-Type\u003c/code\u003e and \u003ccode\u003eContent-Length\u003c/code\u003e headers from WebSocket denial responses on the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, and deliver non-UTF-8 denial bodies intact (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3041\"\u003e#3041\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/8988c23704fc373c9206cca53ec57dd8ad7f44a5\"\u003e\u003ccode\u003e8988c23\u003c/code\u003e\u003c/a\u003e Stabilize macOS Python 3.13 signal shutdown tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3084\"\u003e#3084\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/898ddca9254b53c5bf7a6ee509756704caaa949f\"\u003e\u003ccode\u003e898ddca\u003c/code\u003e\u003c/a\u003e Update PyPI publish action to version 1.14.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3083\"\u003e#3083\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3869f8aac2bdd040fa3fbe564e1dad67e2637641\"\u003e\u003ccode\u003e3869f8a\u003c/code\u003e\u003c/a\u003e Restore Mermaid diagram rendering (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3080\"\u003e#3080\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/64148a9c574e1eb87d3d09b3ce4c256606f8d973\"\u003e\u003ccode\u003e64148a9\u003c/code\u003e\u003c/a\u003e Version 0.52.4 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3079\"\u003e#3079\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9e9e5691bd14d5c4cd66d9bd76c7730bc48461a2\"\u003e\u003ccode\u003e9e9e569\u003c/code\u003e\u003c/a\u003e docs: correct release example PR number (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3072\"\u003e#3072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b783dacab50b9d6767b0cf65826b2dc3aae21909\"\u003e\u003ccode\u003eb783dac\u003c/code\u003e\u003c/a\u003e Remove duplicate Date header from SansIO WebSocket handshakes (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/27019b2a4b1fa6d68a289fcf7d738fbdc6ee4e5d\"\u003e\u003ccode\u003e27019b2\u003c/code\u003e\u003c/a\u003e chore(deps): bump the python-packages group across 1 directory with 11 update...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1b6427311bb84a15addee688f6d41d96e33f8b0a\"\u003e\u003ccode\u003e1b64273\u003c/code\u003e\u003c/a\u003e Fix a typo in index.md (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3006\"\u003e#3006\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a68da608147c5f79d962352dce11de8f6e32d972\"\u003e\u003ccode\u003ea68da60\u003c/code\u003e\u003c/a\u003e Version 0.52.3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3068\"\u003e#3068\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/6e3bb4c5c22531c16d341f2da49f2653307f412f\"\u003e\u003ccode\u003e6e3bb4c\u003c/code\u003e\u003c/a\u003e Use zttp 0.0.24 fast receive path (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.0...0.52.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.2 to 7.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.16.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen combining files, now path separator slashes will automatically be converted to the local file system style. This makes it less necessary to define \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003eissue 2266\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ca href=\"https://coverage.readthedocs.io/en/latest/api_coverage.html#coverage.Coverage.switch_context\"\u003eCoverage.switch_context()\u003c/a\u003e method now returns the previous context.\u003c/li\u003e\n\u003cli\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file path when it was only meant to be replaced once, in the leading portion of the path. This is now fixed, in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003epull 2268\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixes to validation of options and configuration settings:\n\u003cul\u003e\n\u003cli\u003eNegative precision settings now always cause useful error messages (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003epull 2261\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing “Couldn’t use data file …: user-defined function raised exception” error. Now it raises a proper configuration error naming the bad regex, like other regex settings do (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003epull 2262\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eNon-string values in TOML configuration settings now produce a helpful error message instead of a traceback. This affects list settings whose elements aren’t strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e entry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the \u003ccode\u003e[paths]\u003c/code\u003e section (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003epull 2263\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like \u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can’t reach the subprocesses. The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as the entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e slipped through and failed later with “Can’t combine statement coverage data with branch data”. Each named concurrency library is now properly considered (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2270\"\u003epull 2270\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any measured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on Windows. The original extension is now restored on the annotated copy (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003epull 2265\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.16.0\"\u003ecoverage 7.16.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.16.0\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWhen combining files, now path separator slashes will automatically be\nconverted to the local file system style. This makes it less necessary to\ndefine \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems.\nFixes \u003ccode\u003eissue 2266\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe :meth:\u003ccode\u003e.Coverage.switch_context\u003c/code\u003e method now returns the previous context.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file\npath when it was only meant to be replaced once, in the leading portion of\nthe path. This is now fixed, in \u003ccode\u003epull 2268\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixes to validation of options and configuration settings:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNegative precision settings now always cause useful error messages (\u003ccode\u003epull 2261\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing \u0026quot;Couldn't use data file ...:\nuser-defined function raised exception\u0026quot; error. Now it raises a proper\nconfiguration error naming the bad regex, like other regex settings do\n(\u003ccode\u003epull 2262\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNon-string values in TOML configuration settings now produce a helpful\nerror message instead of a traceback.  This affects list settings whose\nelements aren't strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e\nentry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the\n\u003ccode\u003e[paths]\u003c/code\u003e section (\u003ccode\u003epull 2263\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like\n\u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can't\nreach the subprocesses.  The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as\nthe entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e\nslipped through and failed later with \u0026quot;Can't combine statement coverage\ndata with branch data\u0026quot;.  Each named concurrency library is now properly\nconsidered (\u003ccode\u003epull 2270\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any\nmeasured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on\nWindows.  The original extension is now restored on the annotated copy (\u003ccode\u003epull 2265\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2261: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003ecoveragepy/coveragepy#2261\u003c/a\u003e\n.. _pull 2262: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003ecoveragepy/coveragepy#2262\u003c/a\u003e\n.. _pull 2263: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003ecoveragepy/coveragepy#2263\u003c/a\u003e\n.. _pull 2265: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003ecoveragepy/coveragepy#2265\u003c/a\u003e\n.. _issue 2266: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003ecoveragepy/coveragepy#2266\u003c/a\u003e\n.. _pull 2268: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003ecoveragepy/coveragepy#2268\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/coveragepy/coveragepy/commit/3e9fc1653ef31089d02eb7618b9d9ac9414378fc\"\u003e\u003ccode\u003e3e9fc16\u003c/code\u003e\u003c/a\u003e docs: prep for 7.16.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/38be8d13afee6b6525492fc375c739cdfb675e9b\"\u003e\u003ccode\u003e38be8d1\u003c/code\u003e\u003c/a\u003e build: control check-manifest explicitly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/8eb1266ead5c6d356d3437637a509ff86b566253\"\u003e\u003ccode\u003e8eb1266\u003c/code\u003e\u003c/a\u003e docs(build): no longer commit sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1a8b3fa57d56bb70bad62c93d224c18a0fbaae6f\"\u003e\u003ccode\u003e1a8b3fa\u003c/code\u003e\u003c/a\u003e docs: remove sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/aeaa79b812d1bc637ebb5582ab12c076e192c87e\"\u003e\u003ccode\u003eaeaa79b\u003c/code\u003e\u003c/a\u003e docs: linklint is now sphinx-linklint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d5eaf3f6d38f58746bc69e87e64c0b0277a9077d\"\u003e\u003ccode\u003ed5eaf3f\u003c/code\u003e\u003c/a\u003e test: a branchless way to re-add extensions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/57e52fd431cecc1ca03de2c5b1288e0b330c2ef4\"\u003e\u003ccode\u003e57e52fd\u003c/code\u003e\u003c/a\u003e docs: adjust CHANGES for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b9d304d77f7ce3d55df3a46339dbc56d1f49df58\"\u003e\u003ccode\u003eb9d304d\u003c/code\u003e\u003c/a\u003e fix: check for multiprocessing in a --concurrency list (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a6ef9284afbc7d1f392821864b64ddbda0051fc5\"\u003e\u003ccode\u003ea6ef928\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/070461fcfde0437b5b778c2c2a72e433a0a391aa\"\u003e\u003ccode\u003e070461f\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 4 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2271\"\u003e#2271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.2...7.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003cli\u003eImproved cache hit/miss reporting in the Cache panel for \u003ccode\u003ecache.get()\u003c/code\u003e\ncalls with a supplied default value, while documenting the remaining\nambiguity when a cached value equals the supplied default.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)...\n\n_Description has been truncated_","html_url":"https://github.com/tchongwangbakayoko619-star/Plateforme-de-gestion-d-v-nements-universitaires/pull/42","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tchongwangbakayoko619-star%2FPlateforme-de-gestion-d-v-nements-universitaires/issues/42","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/42/packages"},{"uuid":"5317136079","node_id":"PR_kwDOT1EvT88AAAABBz-G5w","number":16,"state":"closed","title":"Bump the python group across 1 directory with 12 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T21:36:46.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-01T21:43:46.000Z","updated_at":"2026-09-04T21:36:48.000Z","time_to_close":258780,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":12,"packages":[{"name":"django","old_version":"6.0.8","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.19.0","new_version":"65.19.1"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.2.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"coverage","old_version":"7.15.4","new_version":"7.16.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.9","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djangorestframework-stubs","old_version":"3.17.1","new_version":"3.18.1","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.13.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.2","new_version":"0.16.5","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 12 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.8` | `6.1` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.19.0` | `65.19.1` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.2.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.4` | `7.16.0` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.9` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.1` | `3.18.1` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.13.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.2` | `0.16.5` |\n\n\nUpdates `django` from 6.0.8 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.8...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.19.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.2.0\u003c/h2\u003e\n\u003cp\u003eCleartext HTTP/2 lands, and an HTTP/2 security fix.\u003c/p\u003e\n\u003ch2\u003eCleartext HTTP/2 (h2c)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp2_cleartext\u003c/code\u003e accepts \u003ccode\u003eprior-knowledge\u003c/code\u003e, \u003ccode\u003eupgrade\u003c/code\u003e, \u003ccode\u003eboth\u003c/code\u003e or \u003ccode\u003eoff\u003c/code\u003e (the\ndefault). Prior knowledge serves a connection that opens with the HTTP/2\npreface; \u003ccode\u003eupgrade\u003c/code\u003e honours an HTTP/1.1 \u003ccode\u003eUpgrade: h2c\u003c/code\u003e request. Both work on the\ngthread, gevent and asgi workers.\u003c/p\u003e\n\u003cp\u003eThis is for deployments where TLS is terminated by a proxy that speaks HTTP/2\nupstream, so the hop into gunicorn no longer drops to HTTP/1.1. Only peers in\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e are considered; everyone else is served HTTP/1.x exactly\nas if the setting were off. Each mechanism is enabled separately, so turning one\non does not turn the other on.\u003c/p\u003e\n\u003cp\u003eDo not expose a cleartext HTTP/2 port to the internet.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eHTTP2Request\u003c/code\u003e built its headers straight from the stream, so nothing the HTTP/1\npath enforces applied over HTTP/2: the underscore and \u003ccode\u003eheader_map\u003c/code\u003e policy,\nduplicate \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e, control characters in values, and the\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e trust gate. An untrusted client could set \u003ccode\u003eSCRIPT_NAME\u003c/code\u003e\nand forge \u003ccode\u003eHTTP_*\u003c/code\u003e entries in the WSGI environ, and decide \u003ccode\u003ewsgi.url_scheme\u003c/code\u003e\nthrough \u003ccode\u003e:scheme\u003c/code\u003e. Both request classes now share one policy mixin, and the\nscheme comes from the transport.\u003c/p\u003e\n\u003cp\u003eIf you serve HTTP/2, this is the reason to upgrade.\u003c/p\u003e\n\u003ch2\u003eOther HTTP/2 fixes\u003c/h2\u003e\n\u003cp\u003eWSGI responses were buffered whole before anything was sent; they stream now.\nHEAD, 204 and 304 no longer carry a body. Events read while blocked on a\nflow-control window were discarded, losing requests and body data outright.\n\u003ccode\u003esendfile()\u003c/code\u003e is refused on HTTP/2 responses rather than bypassing framing.\u003c/p\u003e\n\u003ch2\u003eRequest bodies dropped on Upgrade requests\u003c/h2\u003e\n\u003cp\u003eOn the ASGI worker with the fast parser, any request carrying an \u003ccode\u003eUpgrade\u003c/code\u003e\nheader reached the application with an empty body, whatever the header's value\nand with HTTP/2 switched off entirely. Fixed in \u003ccode\u003egunicorn_h1c\u003c/code\u003e 0.6.9, which the\n\u003ccode\u003efast\u003c/code\u003e extra now requires.\u003c/p\u003e\n\u003cp\u003eFull changelog: \u003ca href=\"https://gunicorn.org/news/\"\u003ehttps://gunicorn.org/news/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/36f2a3c1b80dfa41d70859d12c5bfbbdc23a3c38\"\u003e\u003ccode\u003e36f2a3c\u003c/code\u003e\u003c/a\u003e gunicorn 26.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbba3505f423bfb91af3a87e49ed9d232f39a8fe\"\u003e\u003ccode\u003ecbba350\u003c/code\u003e\u003c/a\u003e test: cover the h2c edge paths that had none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/988541112ebcf3f795c020fc394aa7eed75f9f53\"\u003e\u003ccode\u003e9885411\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3703\"\u003e#3703\u003c/a\u003e from cormier/fix-inconsistency-in-control-socket-docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/86f0919806a2d4d4cce376cc2088352e7643b139\"\u003e\u003ccode\u003e86f0919\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3704\"\u003e#3704\u003c/a\u003e from methane/doc-wsgi-h1c\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/585355122efe736946b977c5605e404ff2d6ddd4\"\u003e\u003ccode\u003e5853551\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3712\"\u003e#3712\u003c/a\u003e from Rotzbua/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7bce87e2aa29a4a794eb2b113ff811cad6a80736\"\u003e\u003ccode\u003e7bce87e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3700\"\u003e#3700\u003c/a\u003e from benoitc/fix/sponsor-logo-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/972dfb03b110c430712c32a3d92ef6397ff8eff6\"\u003e\u003ccode\u003e972dfb0\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3690\"\u003e#3690\u003c/a\u003e from melbinjp/docs/contributing-settings-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7b3f16be8d9cc051538b7f0b58b236b37c9550f8\"\u003e\u003ccode\u003e7b3f16b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3711\"\u003e#3711\u003c/a\u003e from benoitc/docs/http2-changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5bf237c0c7ef5bcdc63046645a17d6bafd609a34\"\u003e\u003ccode\u003e5bf237c\u003c/code\u003e\u003c/a\u003e http2: require gunicorn_h1c 0.6.9 and drop the upgrade body workaround\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7cf03385c574228e28c4952fd410ed2df02acc94\"\u003e\u003ccode\u003e7cf0338\u003c/code\u003e\u003c/a\u003e test: skip the fast-parser cases when gunicorn_h1c is absent\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.4 to 7.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.16.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen combining files, now path separator slashes will automatically be converted to the local file system style. This makes it less necessary to define \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003eissue 2266\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ca href=\"https://coverage.readthedocs.io/en/latest/api_coverage.html#coverage.Coverage.switch_context\"\u003eCoverage.switch_context()\u003c/a\u003e method now returns the previous context.\u003c/li\u003e\n\u003cli\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file path when it was only meant to be replaced once, in the leading portion of the path. This is now fixed, in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003epull 2268\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixes to validation of options and configuration settings:\n\u003cul\u003e\n\u003cli\u003eNegative precision settings now always cause useful error messages (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003epull 2261\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing “Couldn’t use data file …: user-defined function raised exception” error. Now it raises a proper configuration error naming the bad regex, like other regex settings do (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003epull 2262\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eNon-string values in TOML configuration settings now produce a helpful error message instead of a traceback. This affects list settings whose elements aren’t strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e entry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the \u003ccode\u003e[paths]\u003c/code\u003e section (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003epull 2263\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like \u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can’t reach the subprocesses. The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as the entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e slipped through and failed later with “Can’t combine statement coverage data with branch data”. Each named concurrency library is now properly considered (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2270\"\u003epull 2270\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any measured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on Windows. The original extension is now restored on the annotated copy (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003epull 2265\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.16.0\"\u003ecoverage 7.16.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.16.0\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWhen combining files, now path separator slashes will automatically be\nconverted to the local file system style. This makes it less necessary to\ndefine \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems.\nFixes \u003ccode\u003eissue 2266\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe :meth:\u003ccode\u003e.Coverage.switch_context\u003c/code\u003e method now returns the previous context.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file\npath when it was only meant to be replaced once, in the leading portion of\nthe path. This is now fixed, in \u003ccode\u003epull 2268\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixes to validation of options and configuration settings:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNegative precision settings now always cause useful error messages (\u003ccode\u003epull 2261\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing \u0026quot;Couldn't use data file ...:\nuser-defined function raised exception\u0026quot; error. Now it raises a proper\nconfiguration error naming the bad regex, like other regex settings do\n(\u003ccode\u003epull 2262\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNon-string values in TOML configuration settings now produce a helpful\nerror message instead of a traceback.  This affects list settings whose\nelements aren't strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e\nentry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the\n\u003ccode\u003e[paths]\u003c/code\u003e section (\u003ccode\u003epull 2263\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like\n\u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can't\nreach the subprocesses.  The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as\nthe entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e\nslipped through and failed later with \u0026quot;Can't combine statement coverage\ndata with branch data\u0026quot;.  Each named concurrency library is now properly\nconsidered (\u003ccode\u003epull 2270\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any\nmeasured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on\nWindows.  The original extension is now restored on the annotated copy (\u003ccode\u003epull 2265\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2261: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003ecoveragepy/coveragepy#2261\u003c/a\u003e\n.. _pull 2262: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003ecoveragepy/coveragepy#2262\u003c/a\u003e\n.. _pull 2263: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003ecoveragepy/coveragepy#2263\u003c/a\u003e\n.. _pull 2265: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003ecoveragepy/coveragepy#2265\u003c/a\u003e\n.. _issue 2266: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003ecoveragepy/coveragepy#2266\u003c/a\u003e\n.. _pull 2268: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003ecoveragepy/coveragepy#2268\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/coveragepy/coveragepy/commit/3e9fc1653ef31089d02eb7618b9d9ac9414378fc\"\u003e\u003ccode\u003e3e9fc16\u003c/code\u003e\u003c/a\u003e docs: prep for 7.16.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/38be8d13afee6b6525492fc375c739cdfb675e9b\"\u003e\u003ccode\u003e38be8d1\u003c/code\u003e\u003c/a\u003e build: control check-manifest explicitly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/8eb1266ead5c6d356d3437637a509ff86b566253\"\u003e\u003ccode\u003e8eb1266\u003c/code\u003e\u003c/a\u003e docs(build): no longer commit sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1a8b3fa57d56bb70bad62c93d224c18a0fbaae6f\"\u003e\u003ccode\u003e1a8b3fa\u003c/code\u003e\u003c/a\u003e docs: remove sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/aeaa79b812d1bc637ebb5582ab12c076e192c87e\"\u003e\u003ccode\u003eaeaa79b\u003c/code\u003e\u003c/a\u003e docs: linklint is now sphinx-linklint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d5eaf3f6d38f58746bc69e87e64c0b0277a9077d\"\u003e\u003ccode\u003ed5eaf3f\u003c/code\u003e\u003c/a\u003e test: a branchless way to re-add extensions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/57e52fd431cecc1ca03de2c5b1288e0b330c2ef4\"\u003e\u003ccode\u003e57e52fd\u003c/code\u003e\u003c/a\u003e docs: adjust CHANGES for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b9d304d77f7ce3d55df3a46339dbc56d1f49df58\"\u003e\u003ccode\u003eb9d304d\u003c/code\u003e\u003c/a\u003e fix: check for multiprocessing in a --concurrency list (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a6ef9284afbc7d1f392821864b64ddbda0051fc5\"\u003e\u003ccode\u003ea6ef928\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/070461fcfde0437b5b778c2c2a72e433a0a391aa\"\u003e\u003ccode\u003e070461f\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 4 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2271\"\u003e#2271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.4...7.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003cli\u003eImproved cache hit/miss reporting in the Cache panel for \u003ccode\u003ecache.get()\u003c/code\u003e\ncalls with a supplied default value, while documenting the remaining\nambiguity when a cached value equals the supplied default.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.9 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field\u003c/code\u003e corrupting concatenated keys (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/02a46831ceb213421761f312e1368fa7b7e796d9\"\u003e\u003ccode\u003e02a4683\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etestcase_databases\u003c/code\u003e mapping of \u003ccode\u003emulti_db = False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/bc85eb958b63b752cbd7454d6378e51ca50d891d\"\u003e\u003ccode\u003ebc85eb9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_decorators\u003c/code\u003e hoisting values above their definitions (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/4eb5abf3734ba10c96dd53abdf98e50c78c4adae\"\u003e\u003ccode\u003e4eb5abf\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_register\u003c/code\u003e referencing models defined after the admin class (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d782084a4fe43286d6b4b2d11676efad0a1356cb\"\u003e\u003ccode\u003ed782084\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003esettings_storages\u003c/code\u003e erasing settings referenced elsewhere (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/2f3eb7571f87ae8c62389ac8f977935f81fbe58e\"\u003e\u003ccode\u003e2f3eb75\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etest_http_headers\u003c/code\u003e precedence when merging into \u003ccode\u003eheaders=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d750615a98098ff0c44477041932a04089d5aa47\"\u003e\u003ccode\u003ed750615\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003estringagg\u003c/code\u003e moving import despite bare \u003ccode\u003eStringAgg\u003c/code\u003e references (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/49cb8b9c2297d329a8f858beb54fb34e7274830a\"\u003e\u003ccode\u003e49cb8b9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eutils_timezone\u003c/code\u003e matching aliased \u003ccode\u003eutc\u003c/code\u003e imports (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-upgrade/compare/1.31.1...1.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework-stubs` from 3.17.1 to 3.18.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/releases\"\u003edjangorestframework-stubs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.1\u003c/h2\u003e\n\u003cp\u003eThis release dropped Python 3.10 support, following django-stubs upstream (requires Python 3.11+ now).\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMark stub-only synthetic types with \u003ccode\u003e@type_check_only\u003c/code\u003e by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1038\"\u003etypeddjango/djangorestframework-stubs#1038\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ePrimaryKeyRelatedField\u003c/code\u003e \u003ccode\u003epk_field\u003c/code\u003e attribute \u0026amp; parameter type by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1047\"\u003etypeddjango/djangorestframework-stubs#1047\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eManyRelatedField\u003c/code\u003e type parameters \u0026amp; relation field \u003ccode\u003edefault\u003c/code\u003e/\u003ccode\u003einitial\u003c/code\u003e types by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1049\"\u003etypeddjango/djangorestframework-stubs#1049\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eHousekeeping\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Python 3.10 support by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1035\"\u003etypeddjango/djangorestframework-stubs#1035\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCleanup Python 3.10 compatibility by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1036\"\u003etypeddjango/djangorestframework-stubs#1036\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCategorize stubtest allowlist_todo.txt entries by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1037\"\u003etypeddjango/djangorestframework-stubs#1037\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix remaining items in stubtest \u003ccode\u003eallowlist_todo.txt\u003c/code\u003e and remove the file by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1039\"\u003etypeddjango/djangorestframework-stubs#1039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 3.18.1 release by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1050\"\u003etypeddjango/djangorestframework-stubs#1050\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/compare/3.18.0...3.18.1\"\u003ehttps://github.com/typeddjango/djangorestframework-stubs/compare/3.18.0...3.18.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThis is the first version to be based on DRF 3.18\u003c/li\u003e\n\u003cli\u003eThis is the last version to support \u003ccode\u003edjango-stubs\u003c/code\u003e 6.0.x - next release will require 6.1.x\u003c/li\u003e\n\u003cli\u003eThis is the last version to support Python 3.10 - following django-stubs upstream\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop obsolete coreapi/coreschema from stubs (removed in DRF 3.17) by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1025\"\u003etypeddjango/djangorestframework-stubs#1025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate stubs for djangorestframework 3.18.0 by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1030\"\u003etypeddjango/djangorestframework-stubs#1030\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eHousekeeping\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUnlock django-stubs dev dependency pinning in pyproject.toml by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1033\"\u003etypeddjango/djangorestframework-stubs#1033\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 3.18.0 release by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1034\"\u003etypeddjango/djangorestframework-stubs#1034\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/compare/3.17.1...3.18.0\"\u003ehttps://github.com/typeddjango/djangorestframework-stubs/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/11062a8e197e9b003e0b1d1a63a930bf0ceed2c0\"\u003e\u003ccode\u003e11062a8\u003c/code\u003e\u003c/a\u003e Version 3.18.1 release (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1050\"\u003e#1050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/1d74beaf94c86427d4fe0f9269c46e1457881cfa\"\u003e\u003ccode\u003e1d74bea\u003c/code\u003e\u003c/a\u003e Lock file maintenance\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/fd11a58c5cecad38202d3b89c030182ab89596dd\"\u003e\u003ccode\u003efd11a58\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eManyRelatedField\u003c/code\u003e type parameters \u0026amp; relation field \u003ccode\u003edefault\u003c/code\u003e/\u003ccode\u003einitial\u003c/code\u003e t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/fd549233349d09f98979e57812072e8909309b65\"\u003e\u003ccode\u003efd54923\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ePrimaryKeyRelatedField\u003c/code\u003e \u003ccode\u003epk_field\u003c/code\u003e attribute \u0026amp; parameter type (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1047\"\u003e#1047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/33361020c2aecfee710c5a4e6c25dbf6d8603314\"\u003e\u003ccode\u003e3336102\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/e4c9d11557dacb19a3e34791e9c7908397fe318e\"\u003e\u003ccode\u003ee4c9d11\u003c/code\u003e\u003c/a\u003e Lock file maintenance\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/3410442d566a2d6ae8058b2881fb2adbf86c259a\"\u003e\u003ccode\u003e3410442\u003c/code\u003e\u003c/a\u003e Bump sqlparse from 0.5.5 to 0.6.0 (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1042\"\u003e#1042\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/36692fc5a7ee1c87df369c1dc64c84ea9879b4c7\"\u003e\u003ccode\u003e36692fc\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1041\"\u003e#1041\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/5247f84db1b5e2b47abc736b0164f4fc4cf58f72\"\u003e\u003ccode\u003e5247f84\u003c/code\u003e\u003c/a\u003e Update astral-sh/setup-uv action to v10.0.1 (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/603aa1241e8175cc1cfbc1ade9020b047a9cae2d\"\u003e\u003ccode\u003e603aa12\u003c/code\u003e\u003c/a\u003e Fix remaining items in stubtest \u003ccode\u003eallowlist_todo.txt\u003c/code\u003e and remove the file (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1039\"\u003e#1039\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/compare/3.17.1...3.18.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.3.0 to 2.3.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch3\u003eMypy 2.3.1\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix mypyc crash on double yielding Iterators (Daniël van Noord, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21826\"\u003e21826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix mypyc \u003ccode\u003edefault_factory\u003c/code\u003e for inherited dataclass (Daniël van Noord, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21785\"\u003e21785\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClear mypyc coroutine env on coroutine completion (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21734\"\u003e21734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash when unpacking return value from overload (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21830\"\u003e21830\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAcknowledgements\u003c/h3\u003e\n\u003cp\u003eThanks to all mypy contributors who contributed to this release:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAgriya Khetarpal\u003c/li\u003e\n\u003cli\u003eEthan Sarp\u003c/li\u003e\n\u003cli\u003eIvan Levkivskyi\u003c/li\u003e\n\u003cli\u003eJingchen Ye\u003c/li\u003e\n\u003cli\u003eJukka Lehtosalo\u003c/li\u003e\n\u003cli\u003ePiotr Sawicki\u003c/li\u003e\n\u003cli\u003eShantanu\u003c/li\u003e\n\u003cli\u003eTom Bannink\u003c/li\u003e\n\u003cli\u003eViktor Szépe\u003c/li\u003e\n\u003cli\u003eygale\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eI'd also like to thank my employer, Dropbox, for supporting mypy development.\u003c/p\u003e\n\u003ch2\u003eMypy 2.2\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.2.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eSupport for Closed TypedDicts (PEP 728)\u003c/h3\u003e\n\u003cp\u003eMypy now supports closed TypedDicts as specified in PEP 728. A closed TypedDict cannot have extra\nkeys beyond those explicitly defined. This allows the type checker to determine that certain\noperations are safe when they otherwise wouldn't be due to the potential presence of unknown keys.\u003c/p\u003e\n\u003cp\u003eYou can use the \u003ccode\u003eclosed\u003c/code\u003e keyword argument with \u003ccode\u003eTypedDict\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eHasName = TypedDict(\u0026quot;HasName\u0026quot;, {\u0026quot;name\u0026quot;: str})\nHasOnlyName = TypedDict(\u0026quot;HasOnlyName\u0026quot;, {\u0026quot;name\u0026quot;: str}, closed=True)\nMovie = TypedDict(\u0026quot;Movie\u0026quot;, {\u0026quot;name\u0026quot;: str, \u0026quot;year\u0026quot;: int})\n\u003cp\u003emovie: Movie = {\u0026quot;name\u0026quot;: \u0026quot;Nimona\u0026quot;, \u0026quot;year\u0026quot;: 2023}\nhas_name: HasName = movie  # OK: HasName is open (default)\nhas_only_name: HasOnlyName = movie  # Error: HasOnlyName is closed and Movie has extra \u0026quot;year\u0026quot; key\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/d642c4478e9e3acbe9233edbe17ffc569a1a778c\"\u003e\u003ccode\u003ed642c44\u003c/code\u003e\u003c/a\u003e Bump version to 2.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a39242983d3c2cb85886a1eb6d5869180672784c\"\u003e\u003ccode\u003ea392429\u003c/code\u003e\u003c/a\u003e [mypyc] Fix crash on double yielding Iterators (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21826\"\u003e#21826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4843e7773e7dc8fe3f1fd1319277d6d11cd6cdb3\"\u003e\u003ccode\u003e4843e77\u003c/code\u003e\u003c/a\u003e [mypyc] Fix \u003ccode\u003edefault_factory\u003c/code\u003e for inherited dataclass (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21785\"\u003e#21785\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/14f5df93ed8d1be4f4cc9c447eb2e6e619362e05\"\u003e\u003ccode\u003e14f5df9\u003c/code\u003e\u003c/a\u003e [mypyc] Clear coroutine env on coroutine completion (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21734\"\u003e#21734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/6dfa06dda6e34912279e498d35a43ba6dc30bfee\"\u003e\u003ccode\u003e6dfa06d\u003c/code\u003e\u003c/a\u003e Fix crash when unpacking return value from overload (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21830\"\u003e#21830\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a3857467da126d28b55724e8bb682019df9a503e\"\u003e\u003ccode\u003ea385746\u003c/code\u003e\u003c/a\u003e Bump version to 2.3.1+dev\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python/mypy/compare/v2.3.0...v2.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.6.1 to 4.6.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.6.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks that contain \u003ccode\u003e\u0026quot;scripts\u0026quot;: {\u0026quot;build\u0026quot;: ...}\u003c/code\u003e with\nnpm 11.x.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3737\"\u003e#3737\u003c/a\u003e issue by \u003ca href=\"https://github.com/mheiges\"\u003e\u003ccode\u003e@​mheiges\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.6.2 - 2026-08-10\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks that contain \u003ccode\u003e\u0026quot;scripts\u0026quot;: {\u0026quot;build\u0026quot;: ...}\u003c/code\u003e with\nnpm 11.x.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3737\"\u003e#3737\u003c/a\u003e issue by \u003ca href=\"https://github.com/mheiges\"\u003e\u003ccode\u003e@​mheiges\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9767b6c8211a6bf683875a0afcf2b390457a4b66\"\u003e\u003ccode\u003e9767b6c\u003c/code\u003e\u003c/a\u003e v4.6.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/42ee3ff5ac1cae639613c9ad002d0502ae82384f\"\u003e\u003ccode\u003e42ee3ff\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e from pre-commit/npm-build-scripts-11-x\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/30566198cb2d05201625f92b660a34c38ffe2dc7\"\u003e\u003ccode\u003e3056619\u003c/code\u003e\u003c/a\u003e fix \u003ccode\u003elanguage: node\u003c/code\u003e for hooks with build scripts and npm 11.x\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.6.1...v4.6.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-django` from 4.13.0 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/pytest-dev/pytest-django/releases\"\u003epytest-django's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.14.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pytest-django.readthedocs.io/en/stable/changelog.html#v4-14-0-2026-08-10\"\u003ehttps://pytest-django.readthedocs.io/en/stable/changelog.html#v4-14-0-2026-08-10\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/pytest-dev/pytest-django/blob/main/docs/changelog.rst\"\u003epytest-django's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.14.0 (2026-08-10)\u003c/h2\u003e\n\u003cp\u003eCompatibility\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRestored (unofficial) support for Django 5.0 and Django 5.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eImprovements\n^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a \u003ccode\u003edjango\u003c/code\u003e extra to the package. By depending on this extra\n(e.g. \u003ccode\u003epip install pytest-django[django]\u003c/code\u003e), the dependency resolver\nwill ensure you get a version of pytest-django that is compatible with\nyour version of Django (lower bound only). At least from now on...\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/pytest-dev/pytest-django/commit/1a6b6121c7f1f20e2a32c5f1ece7b6671160b968\"\u003e\u003ccode\u003e1a6b612\u003c/code\u003e\u003c/a\u003e Release 4.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/fffb11d199a4f59e5acec5cb42a8ca257ce987e2\"\u003e\u003ccode\u003efffb11d\u003c/code\u003e\u003c/a\u003e docs: remove $ for consistency\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/e8c0606c3871db20f2273bd700c8a51337205622\"\u003e\u003ccode\u003ee8c0606\u003c/code\u003e\u003c/a\u003e docs: move the \u003ccode\u003edjango\u003c/code\u003e extra explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/b66deb68fd5820a763005b5e689821737031524a\"\u003e\u003ccode\u003eb66deb6\u003c/code\u003e\u003c/a\u003e tests: strict import to make pyright happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/823db395089fe268641417de452404162580a7ce\"\u003e\u003ccode\u003e823db39\u003c/code\u003e\u003c/a\u003e tests: fix wrong type (typing only)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/a1eaf5dcdc191b6e95a4d552e30c0aa54d7febf2\"\u003e\u003ccode\u003ea1eaf5d\u003c/code\u003e\u003c/a\u003e Drop django\u0026lt;5 message asserts compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/2ea14230006228f0896b7c785400f17347bdf612\"\u003e\u003ccode\u003e2ea1423\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003e_pre_setup_ran_eagerly\u003c/code\u003e on Django 5.0 and 5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/903429ca05f98dd78b9f24c2ce84e80be24c01c2\"\u003e\u003ccode\u003e903429c\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003edjango\u003c/code\u003e extra to ensure Django dependency compatible lower bound\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/96615893af607fb89fb568445bfedb7783c7aeb0\"\u003e\u003ccode\u003e9661589\u003c/code\u003e\u003c/a\u003e docs: prefer newer pytest config TOML format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/76461962b11e3740dddf9185a4a4985e7f40cf63\"\u003e\u003ccode\u003e7646196\u003c/code\u003e\u003c/a\u003e docs: remove needless comment\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-django/compare/v4.13.0...v4.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.16.2 to 0.16.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.16.5\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-27.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow rules without codes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28049\"\u003e#28049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27666\"\u003e#27666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate preview default rules and categories (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27877\"\u003e#27877\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Detect blocking generic HTTP requests (\u003ccode\u003eASYNC210\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28024\"\u003e#28024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Allow timezone-safe \u003ccode\u003estrptime\u003c/code\u003e chains (\u003ccode\u003eDTZ007\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28023\"\u003e#28023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-simplify\u003c/code\u003e] Respect side effects in \u003ccode\u003elambda\u003c/code\u003e defaults (\u003ccode\u003eSIM401\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28000\"\u003e#28000\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix duplicated \u0026quot;of\u0026quot; in \u003ccode\u003eClientOptions\u003c/code\u003e doc comment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27978\"\u003e#27978\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument rule acceptance guidelines (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27910\"\u003e#27910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocument the new category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27906\"\u003e#27906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jelle-openai\"\u003e\u003ccode\u003e@​jelle-openai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aarushkandukoori\"\u003e\u003ccode\u003e@​aarushkandukoori\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.16.5\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.5/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.16.5/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.16.5\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/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.16.5\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-27.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow rules without codes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28049\"\u003e#28049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27666\"\u003e#27666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate preview default rules and categories (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27877\"\u003e#27877\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Detect blocking generic HTTP requests (\u003ccode\u003eASYNC210\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28024\"\u003e#28024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Allow timezone-safe \u003ccode\u003estrptime\u003c/code\u003e chains (\u003ccode\u003eDTZ007\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28023\"\u003e#28023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-simplify\u003c/code\u003e] Respect side effects in \u003ccode\u003elambda\u003c/code\u003e defaults (\u003ccode\u003eSIM401\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28000\"\u003e#28000\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix duplicated \u0026quot;of\u0026quot; in \u003ccode\u003eClientOptions\u003c/code\u003e doc comment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27978\"\u003e#27978\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument rule acceptance guidelines (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27910\"\u003e#27910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocument the new category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27906\"\u003e#27906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jelle-openai\"\u003e\u003ccode\u003e@​jelle-openai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aarushkandukoori\"\u003e\u003ccode\u003e@​aarushkandukoori\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.16.4\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-20.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-use-pathlib\u003c/code\u003e] Add autofix for \u003ccode\u003ePTH116\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26460\"\u003e#26460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Restrict \u003ccode\u003edelete-full-slice\u003c/code\u003e to lists (\u003ccode\u003eFURB131\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27711\"\u003e#27711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Skip \u003ccode\u003eFURB101\u003c/code\u003e and \u003ccode\u003eFURB103\u003c/code\u003e when the \u003ccode\u003eopen\u003c/code\u003e argument is a file descriptor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27643\"\u003e#27643\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eInvalidInstruction\u003c/code\u003e on Windows CPUs that do not support \u003ccode\u003ePOPCNT\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27803\"\u003e#27803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Emit semantic syntax errors in string type definitions as \u003ccode\u003eF722\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27835\"\u003e#27835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Allow \u003ccode\u003eos._exit\u003c/code\u003e imports in \u003ccode\u003eimport-private-name\u003c/code\u003e (\u003ccode\u003ePLC2701\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27738\"\u003e#27738\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/astral-sh/ruff/commit/9e4938c4a60bed3e87a11ee1e1db1bd23f4d964a\"\u003e\u003ccode\u003e9e4938c\u003c/code\u003e\u003c/a\u003e Bump 0.16.5 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28110\"\u003e#28110\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/aad0e909ef1390f4b2a3ba8aa0a67fb8ea5cbacd\"\u003e\u003ccode\u003eaad0e90\u003c/code\u003e\u003c/a\u003e Allow rules without codes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28049\"\u003e#28049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/5fdab73c5052350400c36b08c5d7710210343bc4\"\u003e\u003ccode\u003e5fdab73\u003c/code\u003e\u003c/a\u003e Update preview default rules and categories (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27877\"\u003e#27877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/29c8e5b2d0a46eb7dc4ff11c1b0a0dc5ccea52e4\"\u003e\u003ccode\u003e29c8e5b\u003c/code\u003e\u003c/a\u003e Document rule acceptance guidelines (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27910\"\u003e#27910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/50a4d7fd106603a5616b01ac3bef3306252b248f\"\u003e\u003ccode\u003e50a4d7f\u003c/code\u003e\u003c/a\u003e Document the new category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27906\"\u003e#27906\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ada87950ea188f882f69b7bd6e2213a9696e3ee2\"\u003e\u003ccode\u003eada8795\u003c/code\u003e\u003c/a\u003e Introduce category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27666\"\u003e#27666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8947238863b61922bfc83f07edcc697c1cc07c0\"\u003e\u003ccode\u003ed894723\u003c/code\u003e\u003c/a\u003e [ty] Infer lambda parameters through callable type aliases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28109\"\u003e#28109\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/2685fdebbcf9938736fed8c45886a629f9c99a06\"\u003e\u003ccode\u003e2685fde\u003c/code\u003e\u003c/a\u003e [ty] Narrow functional enum members in \u003ccode\u003e==\u003c/code\u003e and \u003ccode\u003ematch\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28103\"\u003e#28103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/efcffd2178ce62e9951a53d4c50cadc225a0cfec\"\u003e\u003ccode\u003eefcffd2\u003c/code\u003e\u003c/a\u003e [ty] Intersection simplifications with subtype-related generic specialization...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commi...\n\n_Description has been truncated_","html_url":"https://github.com/athulya3404/EasyTechStore/pull/16","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/athulya3404%2FEasyTechStore/issues/16","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/16/packages"},{"uuid":"5314713232","node_id":"PR_kwDOT4NvPs8AAAABByBm_w","number":14,"state":"closed","title":"Bump the python group across 1 directory with 9 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T17:07:28.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-01T17:14:18.000Z","updated_at":"2026-09-04T17:07:30.000Z","time_to_close":258790,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":9,"packages":[{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.2.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"uvicorn","old_version":"0.52.3","new_version":"0.52.4"},{"name":"coverage","old_version":"7.15.4","new_version":"7.16.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.1.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.9","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"ruff","old_version":"0.16.3","new_version":"0.16.5","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 9 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.2.0` |\n| [uvicorn[standard]](https://github.com/Kludex/uvicorn) | `0.52.3` | `0.52.4` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.4` | `7.16.0` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.1.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.9` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.3` | `0.16.5` |\n\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.2.0\u003c/h2\u003e\n\u003cp\u003eCleartext HTTP/2 lands, and an HTTP/2 security fix.\u003c/p\u003e\n\u003ch2\u003eCleartext HTTP/2 (h2c)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp2_cleartext\u003c/code\u003e accepts \u003ccode\u003eprior-knowledge\u003c/code\u003e, \u003ccode\u003eupgrade\u003c/code\u003e, \u003ccode\u003eboth\u003c/code\u003e or \u003ccode\u003eoff\u003c/code\u003e (the\ndefault). Prior knowledge serves a connection that opens with the HTTP/2\npreface; \u003ccode\u003eupgrade\u003c/code\u003e honours an HTTP/1.1 \u003ccode\u003eUpgrade: h2c\u003c/code\u003e request. Both work on the\ngthread, gevent and asgi workers.\u003c/p\u003e\n\u003cp\u003eThis is for deployments where TLS is terminated by a proxy that speaks HTTP/2\nupstream, so the hop into gunicorn no longer drops to HTTP/1.1. Only peers in\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e are considered; everyone else is served HTTP/1.x exactly\nas if the setting were off. Each mechanism is enabled separately, so turning one\non does not turn the other on.\u003c/p\u003e\n\u003cp\u003eDo not expose a cleartext HTTP/2 port to the internet.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eHTTP2Request\u003c/code\u003e built its headers straight from the stream, so nothing the HTTP/1\npath enforces applied over HTTP/2: the underscore and \u003ccode\u003eheader_map\u003c/code\u003e policy,\nduplicate \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e, control characters in values, and the\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e trust gate. An untrusted client could set \u003ccode\u003eSCRIPT_NAME\u003c/code\u003e\nand forge \u003ccode\u003eHTTP_*\u003c/code\u003e entries in the WSGI environ, and decide \u003ccode\u003ewsgi.url_scheme\u003c/code\u003e\nthrough \u003ccode\u003e:scheme\u003c/code\u003e. Both request classes now share one policy mixin, and the\nscheme comes from the transport.\u003c/p\u003e\n\u003cp\u003eIf you serve HTTP/2, this is the reason to upgrade.\u003c/p\u003e\n\u003ch2\u003eOther HTTP/2 fixes\u003c/h2\u003e\n\u003cp\u003eWSGI responses were buffered whole before anything was sent; they stream now.\nHEAD, 204 and 304 no longer carry a body. Events read while blocked on a\nflow-control window were discarded, losing requests and body data outright.\n\u003ccode\u003esendfile()\u003c/code\u003e is refused on HTTP/2 responses rather than bypassing framing.\u003c/p\u003e\n\u003ch2\u003eRequest bodies dropped on Upgrade requests\u003c/h2\u003e\n\u003cp\u003eOn the ASGI worker with the fast parser, any request carrying an \u003ccode\u003eUpgrade\u003c/code\u003e\nheader reached the application with an empty body, whatever the header's value\nand with HTTP/2 switched off entirely. Fixed in \u003ccode\u003egunicorn_h1c\u003c/code\u003e 0.6.9, which the\n\u003ccode\u003efast\u003c/code\u003e extra now requires.\u003c/p\u003e\n\u003cp\u003eFull changelog: \u003ca href=\"https://gunicorn.org/news/\"\u003ehttps://gunicorn.org/news/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/36f2a3c1b80dfa41d70859d12c5bfbbdc23a3c38\"\u003e\u003ccode\u003e36f2a3c\u003c/code\u003e\u003c/a\u003e gunicorn 26.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbba3505f423bfb91af3a87e49ed9d232f39a8fe\"\u003e\u003ccode\u003ecbba350\u003c/code\u003e\u003c/a\u003e test: cover the h2c edge paths that had none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/988541112ebcf3f795c020fc394aa7eed75f9f53\"\u003e\u003ccode\u003e9885411\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3703\"\u003e#3703\u003c/a\u003e from cormier/fix-inconsistency-in-control-socket-docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/86f0919806a2d4d4cce376cc2088352e7643b139\"\u003e\u003ccode\u003e86f0919\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3704\"\u003e#3704\u003c/a\u003e from methane/doc-wsgi-h1c\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/585355122efe736946b977c5605e404ff2d6ddd4\"\u003e\u003ccode\u003e5853551\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3712\"\u003e#3712\u003c/a\u003e from Rotzbua/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7bce87e2aa29a4a794eb2b113ff811cad6a80736\"\u003e\u003ccode\u003e7bce87e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3700\"\u003e#3700\u003c/a\u003e from benoitc/fix/sponsor-logo-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/972dfb03b110c430712c32a3d92ef6397ff8eff6\"\u003e\u003ccode\u003e972dfb0\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3690\"\u003e#3690\u003c/a\u003e from melbinjp/docs/contributing-settings-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7b3f16be8d9cc051538b7f0b58b236b37c9550f8\"\u003e\u003ccode\u003e7b3f16b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3711\"\u003e#3711\u003c/a\u003e from benoitc/docs/http2-changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5bf237c0c7ef5bcdc63046645a17d6bafd609a34\"\u003e\u003ccode\u003e5bf237c\u003c/code\u003e\u003c/a\u003e http2: require gunicorn_h1c 0.6.9 and drop the upgrade body workaround\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7cf03385c574228e28c4952fd410ed2df02acc94\"\u003e\u003ccode\u003e7cf0338\u003c/code\u003e\u003c/a\u003e test: skip the fast-parser cases when gunicorn_h1c is absent\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn[standard]` from 0.52.3 to 0.52.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn[standard]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.52.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn[standard]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.52.4 (August 18, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/8988c23704fc373c9206cca53ec57dd8ad7f44a5\"\u003e\u003ccode\u003e8988c23\u003c/code\u003e\u003c/a\u003e Stabilize macOS Python 3.13 signal shutdown tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3084\"\u003e#3084\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/898ddca9254b53c5bf7a6ee509756704caaa949f\"\u003e\u003ccode\u003e898ddca\u003c/code\u003e\u003c/a\u003e Update PyPI publish action to version 1.14.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3083\"\u003e#3083\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3869f8aac2bdd040fa3fbe564e1dad67e2637641\"\u003e\u003ccode\u003e3869f8a\u003c/code\u003e\u003c/a\u003e Restore Mermaid diagram rendering (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3080\"\u003e#3080\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/64148a9c574e1eb87d3d09b3ce4c256606f8d973\"\u003e\u003ccode\u003e64148a9\u003c/code\u003e\u003c/a\u003e Version 0.52.4 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3079\"\u003e#3079\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9e9e5691bd14d5c4cd66d9bd76c7730bc48461a2\"\u003e\u003ccode\u003e9e9e569\u003c/code\u003e\u003c/a\u003e docs: correct release example PR number (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3072\"\u003e#3072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b783dacab50b9d6767b0cf65826b2dc3aae21909\"\u003e\u003ccode\u003eb783dac\u003c/code\u003e\u003c/a\u003e Remove duplicate Date header from SansIO WebSocket handshakes (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/27019b2a4b1fa6d68a289fcf7d738fbdc6ee4e5d\"\u003e\u003ccode\u003e27019b2\u003c/code\u003e\u003c/a\u003e chore(deps): bump the python-packages group across 1 directory with 11 update...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1b6427311bb84a15addee688f6d41d96e33f8b0a\"\u003e\u003ccode\u003e1b64273\u003c/code\u003e\u003c/a\u003e Fix a typo in index.md (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3006\"\u003e#3006\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.4 to 7.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.16.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen combining files, now path separator slashes will automatically be converted to the local file system style. This makes it less necessary to define \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003eissue 2266\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ca href=\"https://coverage.readthedocs.io/en/latest/api_coverage.html#coverage.Coverage.switch_context\"\u003eCoverage.switch_context()\u003c/a\u003e method now returns the previous context.\u003c/li\u003e\n\u003cli\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file path when it was only meant to be replaced once, in the leading portion of the path. This is now fixed, in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003epull 2268\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixes to validation of options and configuration settings:\n\u003cul\u003e\n\u003cli\u003eNegative precision settings now always cause useful error messages (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003epull 2261\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing “Couldn’t use data file …: user-defined function raised exception” error. Now it raises a proper configuration error naming the bad regex, like other regex settings do (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003epull 2262\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eNon-string values in TOML configuration settings now produce a helpful error message instead of a traceback. This affects list settings whose elements aren’t strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e entry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the \u003ccode\u003e[paths]\u003c/code\u003e section (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003epull 2263\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like \u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can’t reach the subprocesses. The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as the entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e slipped through and failed later with “Can’t combine statement coverage data with branch data”. Each named concurrency library is now properly considered (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2270\"\u003epull 2270\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any measured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on Windows. The original extension is now restored on the annotated copy (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003epull 2265\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.16.0\"\u003ecoverage 7.16.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.16.0\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWhen combining files, now path separator slashes will automatically be\nconverted to the local file system style. This makes it less necessary to\ndefine \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems.\nFixes \u003ccode\u003eissue 2266\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe :meth:\u003ccode\u003e.Coverage.switch_context\u003c/code\u003e method now returns the previous context.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file\npath when it was only meant to be replaced once, in the leading portion of\nthe path. This is now fixed, in \u003ccode\u003epull 2268\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixes to validation of options and configuration settings:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNegative precision settings now always cause useful error messages (\u003ccode\u003epull 2261\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing \u0026quot;Couldn't use data file ...:\nuser-defined function raised exception\u0026quot; error. Now it raises a proper\nconfiguration error naming the bad regex, like other regex settings do\n(\u003ccode\u003epull 2262\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNon-string values in TOML configuration settings now produce a helpful\nerror message instead of a traceback.  This affects list settings whose\nelements aren't strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e\nentry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the\n\u003ccode\u003e[paths]\u003c/code\u003e section (\u003ccode\u003epull 2263\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like\n\u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can't\nreach the subprocesses.  The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as\nthe entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e\nslipped through and failed later with \u0026quot;Can't combine statement coverage\ndata with branch data\u0026quot;.  Each named concurrency library is now properly\nconsidered (\u003ccode\u003epull 2270\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any\nmeasured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on\nWindows.  The original extension is now restored on the annotated copy (\u003ccode\u003epull 2265\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2261: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003ecoveragepy/coveragepy#2261\u003c/a\u003e\n.. _pull 2262: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003ecoveragepy/coveragepy#2262\u003c/a\u003e\n.. _pull 2263: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003ecoveragepy/coveragepy#2263\u003c/a\u003e\n.. _pull 2265: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003ecoveragepy/coveragepy#2265\u003c/a\u003e\n.. _issue 2266: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003ecoveragepy/coveragepy#2266\u003c/a\u003e\n.. _pull 2268: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003ecoveragepy/coveragepy#2268\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/coveragepy/coveragepy/commit/3e9fc1653ef31089d02eb7618b9d9ac9414378fc\"\u003e\u003ccode\u003e3e9fc16\u003c/code\u003e\u003c/a\u003e docs: prep for 7.16.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/38be8d13afee6b6525492fc375c739cdfb675e9b\"\u003e\u003ccode\u003e38be8d1\u003c/code\u003e\u003c/a\u003e build: control check-manifest explicitly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/8eb1266ead5c6d356d3437637a509ff86b566253\"\u003e\u003ccode\u003e8eb1266\u003c/code\u003e\u003c/a\u003e docs(build): no longer commit sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1a8b3fa57d56bb70bad62c93d224c18a0fbaae6f\"\u003e\u003ccode\u003e1a8b3fa\u003c/code\u003e\u003c/a\u003e docs: remove sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/aeaa79b812d1bc637ebb5582ab12c076e192c87e\"\u003e\u003ccode\u003eaeaa79b\u003c/code\u003e\u003c/a\u003e docs: linklint is now sphinx-linklint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d5eaf3f6d38f58746bc69e87e64c0b0277a9077d\"\u003e\u003ccode\u003ed5eaf3f\u003c/code\u003e\u003c/a\u003e test: a branchless way to re-add extensions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/57e52fd431cecc1ca03de2c5b1288e0b330c2ef4\"\u003e\u003ccode\u003e57e52fd\u003c/code\u003e\u003c/a\u003e docs: adjust CHANGES for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b9d304d77f7ce3d55df3a46339dbc56d1f49df58\"\u003e\u003ccode\u003eb9d304d\u003c/code\u003e\u003c/a\u003e fix: check for multiprocessing in a --concurrency list (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a6ef9284afbc7d1f392821864b64ddbda0051fc5\"\u003e\u003ccode\u003ea6ef928\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/070461fcfde0437b5b778c2c2a72e433a0a391aa\"\u003e\u003ccode\u003e070461f\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 4 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2271\"\u003e#2271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.4...7.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.1.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\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/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.9 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field\u003c/code\u003e corrupting concatenated keys (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/02a46831ceb213421761f312e1368fa7b7e796d9\"\u003e\u003ccode\u003e02a4683\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etestcase_databases\u003c/code\u003e mapping of \u003ccode\u003emulti_db = False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/bc85eb958b63b752cbd7454d6378e51ca50d891d\"\u003e\u003ccode\u003ebc85eb9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_decorators\u003c/code\u003e hoisting values above their definitions (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/4eb5abf3734ba10c96dd53abdf98e50c78c4adae\"\u003e\u003ccode\u003e4eb5abf\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_register\u003c/code\u003e referencing models defined after the admin class (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d782084a4fe43286d6b4b2d11676efad0a1356cb\"\u003e\u003ccode\u003ed782084\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003esettings_storages\u003c/code\u003e erasing settings referenced elsewhere (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/2f3eb7571f87ae8c62389ac8f977935f81fbe58e\"\u003e\u003ccode\u003e2f3eb75\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etest_http_headers\u003c/code\u003e precedence when merging into \u003ccode\u003eheaders=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d750615a98098ff0c44477041932a04089d5aa47\"\u003e\u003ccode\u003ed750615\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003estringagg\u003c/code\u003e moving import despite bare \u003ccode\u003eStringAgg\u003c/code\u003e references (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/49cb8b9c2297d329a8f858beb54fb34e7274830a\"\u003e\u003ccode\u003e49cb8b9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eutils_timezone\u003c/code\u003e matching aliased \u003ccode\u003eutc\u003c/code\u003e imports (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-upgrade/compare/1.31.1...1.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.3.0 to 2.3.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch3\u003eMypy 2.3.1\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix mypyc crash on double yielding Iterators (Daniël van Noord, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21826\"\u003e21826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix mypyc \u003ccode\u003edefault_factory\u003c/code\u003e for inherited dataclass (Daniël van Noord, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21785\"\u003e21785\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClear mypyc coroutine env on coroutine completion (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21734\"\u003e21734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash when unpacking return value from overload (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21830\"\u003e21830\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAcknowledgements\u003c/h3\u003e\n\u003cp\u003eThanks to all mypy contributors who contributed to this release:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAgriya Khetarpal\u003c/li\u003e\n\u003cli\u003eEthan Sarp\u003c/li\u003e\n\u003cli\u003eIvan Levkivskyi\u003c/li\u003e\n\u003cli\u003eJingchen Ye\u003c/li\u003e\n\u003cli\u003eJukka Lehtosalo\u003c/li\u003e\n\u003cli\u003ePiotr Sawicki\u003c/li\u003e\n\u003cli\u003eShantanu\u003c/li\u003e\n\u003cli\u003eTom Bannink\u003c/li\u003e\n\u003cli\u003eViktor Szépe\u003c/li\u003e\n\u003cli\u003eygale\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eI'd also like to thank my employer, Dropbox, for supporting mypy development.\u003c/p\u003e\n\u003ch2\u003eMypy 2.2\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.2.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eSupport for Closed TypedDicts (PEP 728)\u003c/h3\u003e\n\u003cp\u003eMypy now supports closed TypedDicts as specified in PEP 728. A closed TypedDict cannot have extra\nkeys beyond those explicitly defined. This allows the type checker to determine that certain\noperations are safe when they otherwise wouldn't be due to the potential presence of unknown keys.\u003c/p\u003e\n\u003cp\u003eYou can use the \u003ccode\u003eclosed\u003c/code\u003e keyword argument with \u003ccode\u003eTypedDict\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eHasName = TypedDict(\u0026quot;HasName\u0026quot;, {\u0026quot;name\u0026quot;: str})\nHasOnlyName = TypedDict(\u0026quot;HasOnlyName\u0026quot;, {\u0026quot;name\u0026quot;: str}, closed=True)\nMovie = TypedDict(\u0026quot;Movie\u0026quot;, {\u0026quot;name\u0026quot;: str, \u0026quot;year\u0026quot;: int})\n\u003cp\u003emovie: Movie = {\u0026quot;name\u0026quot;: \u0026quot;Nimona\u0026quot;, \u0026quot;year\u0026quot;: 2023}\nhas_name: HasName = movie  # OK: HasName is open (default)\nhas_only_name: HasOnlyName = movie  # Error: HasOnlyName is closed and Movie has extra \u0026quot;year\u0026quot; key\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/d642c4478e9e3acbe9233edbe17ffc569a1a778c\"\u003e\u003ccode\u003ed642c44\u003c/code\u003e\u003c/a\u003e Bump version to 2.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a39242983d3c2cb85886a1eb6d5869180672784c\"\u003e\u003ccode\u003ea392429\u003c/code\u003e\u003c/a\u003e [mypyc] Fix crash on double yielding Iterators (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21826\"\u003e#21826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4843e7773e7dc8fe3f1fd1319277d6d11cd6cdb3\"\u003e\u003ccode\u003e4843e77\u003c/code\u003e\u003c/a\u003e [mypyc] Fix \u003ccode\u003edefault_factory\u003c/code\u003e for inherited dataclass (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21785\"\u003e#21785\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/14f5df93ed8d1be4f4cc9c447eb2e6e619362e05\"\u003e\u003ccode\u003e14f5df9\u003c/code\u003e\u003c/a\u003e [mypyc] Clear coroutine env on coroutine completion (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21734\"\u003e#21734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/6dfa06dda6e34912279e498d35a43ba6dc30bfee\"\u003e\u003ccode\u003e6dfa06d\u003c/code\u003e\u003c/a\u003e Fix crash when unpacking return value from overload (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21830\"\u003e#21830\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a3857467da126d28b55724e8bb682019df9a503e\"\u003e\u003ccode\u003ea385746\u003c/code\u003e\u003c/a\u003e Bump version to 2.3.1+dev\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python/mypy/compare/v2.3.0...v2.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.16.3 to 0.16.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.16.5\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-27.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow rules without codes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28049\"\u003e#28049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27666\"\u003e#27666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate preview default rules and categories (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27877\"\u003e#27877\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Detect blocking generic HTTP requests (\u003ccode\u003eASYNC210\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28024\"\u003e#28024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Allow timezone-safe \u003ccode\u003estrptime\u003c/code\u003e chains (\u003ccode\u003eDTZ007\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28023\"\u003e#28023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-simplify\u003c/code\u003e] Respect side effects in \u003ccode\u003elambda\u003c/code\u003e defaults (\u003ccode\u003eSIM401\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28000\"\u003e#28000\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix duplicated \u0026quot;of\u0026quot; in \u003ccode\u003eClientOptions\u003c/code\u003e doc comment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27978\"\u003e#27978\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument rule acceptance guidelines (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27910\"\u003e#27910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocument the new category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27906\"\u003e#27906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jelle-openai\"\u003e\u003ccode\u003e@​jelle-openai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aarushkandukoori\"\u003e\u003ccode\u003e@​aarushkandukoori\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.16.5\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.5/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.16.5/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.16.5\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/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.16.5\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-27.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow rules without codes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28049\"\u003e#28049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27666\"\u003e#27666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate preview default rules and categories (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27877\"\u003e#27877\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Detect blocking generic HTTP requests (\u003ccode\u003eASYNC210\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28024\"\u003e#28024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Allow timezone-safe \u003ccode\u003estrptime\u003c/code\u003e chains (\u003ccode\u003eDTZ007\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28023\"\u003e#28023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-simplify\u003c/code\u003e] Respect side effects in \u003ccode\u003elambda\u003c/code\u003e defaults (\u003ccode\u003eSIM401\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28000\"\u003e#28000\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix duplicated \u0026quot;of\u0026quot; in \u003ccode\u003eClientOptions\u003c/code\u003e doc comment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27978\"\u003e#27978\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument rule acceptance guidelines (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27910\"\u003e#27910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocument the new category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27906\"\u003e#27906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jelle-openai\"\u003e\u003ccode\u003e@​jelle-openai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aarushkandukoori\"\u003e\u003ccode\u003e@​aarushkandukoori\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.16.4\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-20.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-use-pathlib\u003c/code\u003e] Add autofix for \u003ccode\u003ePTH116\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26460\"\u003e#26460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Restrict \u003ccode\u003edelete-full-slice\u003c/code\u003e to lists (\u003ccode\u003eFURB131\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27711\"\u003e#27711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Skip \u003ccode\u003eFURB101\u003c/code\u003e and \u003ccode\u003eFURB103\u003c/code\u003e when the \u003ccode\u003eopen\u003c/code\u003e argument is a file descriptor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27643\"\u003e#27643\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eInvalidInstruction\u003c/code\u003e on Windows CPUs that do not support \u003ccode\u003ePOPCNT\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27803\"\u003e#27803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Emit semantic syntax errors in string type definitions as \u003ccode\u003eF722\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27835\"\u003e#27835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Allow \u003ccode\u003eos._exit\u003c/code\u003e imports in \u003ccode\u003eimport-private-name\u003c/code\u003e (\u003ccode\u003ePLC2701\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27738\"\u003e#27738\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/astral-sh/ruff/commit/9e4938c4a60bed3e87a11ee1e1db1bd23f4d964a\"\u003e\u003ccode\u003e9e4938c\u003c/code\u003e\u003c/a\u003e Bump 0.16.5 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28110\"\u003e#28110\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/aad0e909ef1390f4b2a3ba8aa0a67fb8ea5cbacd\"\u003e\u003ccode\u003eaad0e90\u003c/code\u003e\u003c/a\u003e Allow rules without codes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28049\"\u003e#28049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/5fdab73c5052350400c36b08c5d7710210343bc4\"\u003e\u003ccode\u003e5fdab73\u003c/code\u003e\u003c/a\u003e Update preview default rules and categories (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27877\"\u003e#27877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/29c8e5b2d0a46eb7dc4ff11c1b0a0dc5ccea52e4\"\u003e\u003ccode\u003e29c8e5b\u003c/code\u003e\u003c/a\u003e Document rule acceptance guidelines (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27910\"\u003e#27910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/50a4d7fd106603a5616b01ac3bef3306252b248f\"\u003e\u003ccode\u003e50a4d7f\u003c/code\u003e\u003c/a\u003e Document the new category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27906\"\u003e#27906\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ada87950ea188f882f69b7bd6e2213a9696e3ee2\"\u003e\u003ccode\u003eada8795\u003c/code\u003e\u003c/a\u003e Introduce category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27666\"\u003e#27666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8947238863b61922bfc83f07edcc697c1cc07c0\"\u003e\u003ccode\u003ed894723\u003c/code\u003e\u003c/a\u003e [ty] Infer lambda parameters through callable type aliases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28109\"\u003e#28109\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/2685fdebbcf9938736fed8c45886a629f9c99a06\"\u003e\u003ccode\u003e2685fde\u003c/code\u003e\u003c/a\u003e [ty] Narrow functional enum members in \u003ccode\u003e==\u003c/code\u003e and \u003ccode\u003ematch\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28103\"\u003e#28103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/efcffd2178ce62e9951a53d4c50cadc225a0cfec\"\u003e\u003ccode\u003eefcffd2\u003c/code\u003e\u003c/a\u003e [ty] Intersection simplifications with subtype-related generic specialization...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/eb780488037504e11f145ed778654fd8a825028b\"\u003e\u003ccode\u003eeb78048\u003c/code\u003e\u003c/a\u003e [ty] Bump ecosystem-analyzer for HTML escaping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28104\"\u003e#28104\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.16.3...0.16.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/NGUEMEWEERWANANGEDARYL/NEAD-AGRO-MARKETPLACE/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/NGUEMEWEERWANANGEDARYL%2FNEAD-AGRO-MARKETPLACE/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"},{"uuid":"5285452411","node_id":"PR_kwDOTVr0xc8AAAABBbSeqQ","number":55,"state":"closed","title":"Bump the python group across 1 directory with 10 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-09-05T08:13:57.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-29T08:14:08.000Z","updated_at":"2026-09-05T08:13:59.000Z","time_to_close":604789,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":10,"packages":[{"name":"django","old_version":"6.0.7","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-htmx","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/adamchainz/django-htmx"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"markdown","old_version":"3.10.2","new_version":"3.10.3","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.21","new_version":"0.16.4","repository_url":"https://github.com/astral-sh/ruff"},{"name":"semgrep","old_version":"1.169.0","new_version":"1.174.0","repository_url":"https://github.com/semgrep/semgrep"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 9 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.7` | `6.1` |\n| [django-htmx](https://github.com/adamchainz/django-htmx) | `1.27.0` | `1.29.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.10.2` | `3.10.3` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.21` | `0.16.4` |\n| [semgrep](https://github.com/semgrep/semgrep) | `1.169.0` | `1.174.0` |\n\n\nUpdates `django` from 6.0.7 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.7...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-htmx` from 1.27.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-htmx/blob/main/docs/changelog.rst\"\u003edjango-htmx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 (2026-08-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eVendor some stable htmx extensions, named per their htmx 4 versions: \u003ccode\u003ehtmx-2-compat\u003c/code\u003e, \u003ccode\u003ehx-browser-indicator\u003c/code\u003e, \u003ccode\u003ehx-download\u003c/code\u003e, \u003ccode\u003ehx-head\u003c/code\u003e, \u003ccode\u003ehx-optimistic\u003c/code\u003e, \u003ccode\u003ehx-preload\u003c/code\u003e, \u003ccode\u003ehx-prompt\u003c/code\u003e, \u003ccode\u003ehx-ptag\u003c/code\u003e, \u003ccode\u003ehx-sse\u003c/code\u003e, \u003ccode\u003ehx-targets\u003c/code\u003e, \u003ccode\u003ehx-upsert\u003c/code\u003e, and \u003ccode\u003ehx-ws\u003c/code\u003e.\nRender their script tags with the new \u003ccode\u003eextensions\u003c/code\u003e argument of the \u003ccode\u003ehtmx_script\u003c/code\u003e :doc:\u003ccode\u003etemplate tags \\\u0026lt;template_tags\u0026gt;\u003c/code\u003e, which selects the extension files matching the htmx version in use:\u003c/p\u003e\n\u003cp\u003e.. code-block:: django\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e{% htmx_script version=4 extensions=\u0026quot;hx-sse,hx-ws\u0026quot; %}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003ehx-head\u003c/code\u003e, \u003ccode\u003ehx-preload\u003c/code\u003e, \u003ccode\u003ehx-sse\u003c/code\u003e, and \u003ccode\u003ehx-ws\u003c/code\u003e are available for both htmx versions 2 and 4; the rest are htmx 4 only.\u003c/p\u003e\n\u003cp\u003eThe special name \u003ccode\u003ehtmax\u003c/code\u003e renders htmx 4’s htmax bundle of htmx plus its most popular extensions, in place of the plain htmx script:\u003c/p\u003e\n\u003cp\u003e.. code-block:: django\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e{% htmx_script version=4 extensions=\u0026quot;htmax\u0026quot; %}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003ePR [#614](https://github.com/adamchainz/django-htmx/issues/614) \u0026lt;https://github.com/adamchainz/django-htmx/pull/614\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Rex Zhang for initial work in \u003ccode\u003ePR [#575](https://github.com/adamchainz/django-htmx/issues/575) \u0026lt;https://github.com/adamchainz/django-htmx/pull/575/commits\u0026gt;\u003c/code\u003e\u003c/strong\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpgrade the vendored htmx 2 to \u003ccode\u003eversion 2.0.10 \u0026lt;https://github.com/bigskysoftware/htmx/blob/master/CHANGELOG.md#2010---2026-04-21\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#594](https://github.com/adamchainz/django-htmx/issues/594) \u0026lt;https://github.com/adamchainz/django-htmx/pull/594\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpgrade the vendored htmx 4 to \u003ccode\u003eversion 4.0.0-beta6 \u0026lt;https://github.com/bigskysoftware/htmx/releases/tag/v4.0.0-beta6\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#610](https://github.com/adamchainz/django-htmx/issues/610) \u0026lt;https://github.com/adamchainz/django-htmx/pull/610\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd support for the polling tags protocol of the htmx 4 |hx-ptag extension|__:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:attr:\u003ccode\u003eHtmxDetails.ptag \u0026lt;django_htmx.middleware.HtmxDetails.ptag\u0026gt;\u003c/code\u003e reads the \u003ccode\u003eHX-PTag\u003c/code\u003e request header directly.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe :func:\u003ccode\u003edjango_htmx.http.ptag\u003c/code\u003e view decorator implements the protocol, with an API mirroring Django’s |etag decorator|__.\nIt computes the current tag with the given function and, when the \u003ccode\u003eHX-PTag\u003c/code\u003e request header matches, returns a 304 (Not Modified) response without calling the view, making htmx skip the swap.\nOtherwise, it calls the view and sets the \u003ccode\u003eHX-PTag\u003c/code\u003e response header.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. |hx-ptag extension| replace:: \u003ccode\u003ehx-ptag\u003c/code\u003e extension\n__ \u003ca href=\"https://four.htmx.org/extensions/hx-ptag\"\u003ehttps://four.htmx.org/extensions/hx-ptag\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. |etag decorator| replace:: \u003ccode\u003eetag\u003c/code\u003e decorator\n__ \u003ca href=\"https://docs.djangoproject.com/en/stable/topics/conditional-view-processing/\"\u003ehttps://docs.djangoproject.com/en/stable/topics/conditional-view-processing/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#613](https://github.com/adamchainz/django-htmx/issues/613) \u0026lt;https://github.com/adamchainz/django-htmx/pull/613\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitch package build backend from setuptools to \u003ccode\u003euv_build \u0026lt;https://docs.astral.sh/uv/concepts/build-backend/\u0026gt;\u003c/code\u003e__.\nThis makes builds with uv about nine times faster, since uv runs the backend natively, without creating a build environment or spawning a Python process.\nAdditionally, source distributions no longer include test files, which setuptools previously included incompletely, missing the files needed to actually run them.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.28.0 (2026-07-12)\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/adamchainz/django-htmx/commit/a27556eee0ffa92829427e95c7d8e2bf997a4bb0\"\u003e\u003ccode\u003ea27556e\u003c/code\u003e\u003c/a\u003e Version 1.29.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/f59765a306af6884d70e0b3a8494dcbf52830dfb\"\u003e\u003ccode\u003ef59765a\u003c/code\u003e\u003c/a\u003e Switch build backend to uv_build (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/615\"\u003e#615\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/e2da8c581f959ee909ba1c90aa98760fdb5f845c\"\u003e\u003ccode\u003ee2da8c5\u003c/code\u003e\u003c/a\u003e Note :inherited required on htmx 4 in installation docs (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/dcf641fc56dcb653f5d1c677cf48b82a7aee160d\"\u003e\u003ccode\u003edcf641f\u003c/code\u003e\u003c/a\u003e Vendor htmx extensions (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/614\"\u003e#614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/007f97c3e25924ffd85c88f2466e373b4df0eb22\"\u003e\u003ccode\u003e007f97c\u003c/code\u003e\u003c/a\u003e Add htmx 4 polling support (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/613\"\u003e#613\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/f2c3a138631ac296b6b02ee49bbb5a7a5d905321\"\u003e\u003ccode\u003ef2c3a13\u003c/code\u003e\u003c/a\u003e Remove sphinx-build-compatibility (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/9404744305ea391cb567c3430ccddcf9e25c2c38\"\u003e\u003ccode\u003e9404744\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/611\"\u003e#611\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/07171ea72639c5ee9956713d03d303bf523d605b\"\u003e\u003ccode\u003e07171ea\u003c/code\u003e\u003c/a\u003e Upgrade htmx 4 to 4.0.0-beta6 (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/c1af3116605888102265b05d79b1004ee3814d63\"\u003e\u003ccode\u003ec1af311\u003c/code\u003e\u003c/a\u003e Upgrade htmx to version 2.0.10 (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/65a895aa7c2f56eeb3d7fa5b3bd7aef7ce52f50d\"\u003e\u003ccode\u003e65a895a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-htmx/compare/1.27.0...1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-ninja` from 1.6.2 to 1.6.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/vitalik/django-ninja/releases\"\u003edjango-ninja's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.6.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Django upper version constraint by \u003ca href=\"https://github.com/Stormheg\"\u003e\u003ccode\u003e@​Stormheg\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vitalik/django-ninja/pull/1749\"\u003evitalik/django-ninja#1749\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate packaging metadata to PEP 621 for Flit 4 compatibility (with \u003ca href=\"https://github.com/LexGlu\"\u003e\u003ccode\u003e@​LexGlu\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/vitalik/django-ninja/pull/1753\"\u003evitalik/django-ninja#1753\u003c/a\u003e) in \u003ca href=\"https://redirect.github.com/vitalik/django-ninja/pull/1762\"\u003evitalik/django-ninja#1762\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eHotfix release cut from v1.6.2 — contains only the changes above, none of the other work currently on master.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/vitalik/django-ninja/compare/v1.6.2...v1.6.3\"\u003ehttps://github.com/vitalik/django-ninja/compare/v1.6.2...v1.6.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vitalik/django-ninja/commit/4086c9b36a72aa8e47ef882162a478a017841c0d\"\u003e\u003ccode\u003e4086c9b\u003c/code\u003e\u003c/a\u003e Bump version to 1.6.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vitalik/django-ninja/commit/1229ff928f78be2fd456bcb1b5afaf1eabf8e195\"\u003e\u003ccode\u003e1229ff9\u003c/code\u003e\u003c/a\u003e Migrate pyproject.toml to PEP 621 [project] metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vitalik/django-ninja/commit/9798e0a24b86ab0f5c0422861d4803fff1ccfa91\"\u003e\u003ccode\u003e9798e0a\u003c/code\u003e\u003c/a\u003e Drop Django upper version constraint\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/vitalik/django-ninja/compare/v1.6.2...v1.6.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown` from 3.10.2 to 3.10.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Python-Markdown/markdown/releases\"\u003emarkdown's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 3.10.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eSetextHeaderProcessor\u003c/code\u003e regex to prevent mixed \u003ccode\u003e=\u003c/code\u003e and \u003ccode\u003e-\u003c/code\u003e chars in setext-style headers (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1606\"\u003e#1606\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd AI Policy to Contributing Guide.\u003c/li\u003e\n\u003cli\u003eOfficially document all included extensions as being in maintenance mode.\u003c/li\u003e\n\u003cli\u003eLink the Extension API documentation to the API Reference (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1612\"\u003e#1612\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/Python-Markdown/markdown/blob/master/docs/changelog.md\"\u003emarkdown's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[3.10.3] - 2026-07-30\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eSetextHeaderProcessor\u003c/code\u003e regex to prevent mixed \u003ccode\u003e=\u003c/code\u003e and \u003ccode\u003e-\u003c/code\u003e chars in setext-style headers (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1606\"\u003e#1606\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd AI Policy to Contributing Guide.\u003c/li\u003e\n\u003cli\u003eOfficially document all included extensions as being in maintenance mode.\u003c/li\u003e\n\u003cli\u003eLink the Extension API documentation to the API Reference (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1612\"\u003e#1612\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-Markdown/markdown/commit/bb50627dc07fde6ee5ed7478464062c537ebad2c\"\u003e\u003ccode\u003ebb50627\u003c/code\u003e\u003c/a\u003e Bump version to 3.10.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/8453df010daf9547efcc20a05bb12c0e2fd2016a\"\u003e\u003ccode\u003e8453df0\u003c/code\u003e\u003c/a\u003e Update Extension API documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/93ac448b161deb5a4578c7f56bd5f5c39dc280c3\"\u003e\u003ccode\u003e93ac448\u003c/code\u003e\u003c/a\u003e Document that all extensions are in maintenance mode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/d38fd4a6ee4ef897812bc481855a7f9d8a4ad4f1\"\u003e\u003ccode\u003ed38fd4a\u003c/code\u003e\u003c/a\u003e Create AI Policy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/ddead47873e7918829e1d8b0eaee6ab725793cc9\"\u003e\u003ccode\u003eddead47\u003c/code\u003e\u003c/a\u003e Prevent mixed =/- chars in Setext-style headings\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Python-Markdown/markdown/compare/3.10.2...3.10.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs` from 6.0.6 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.6...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.6.0 to 4.6.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.6.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks that contain \u003ccode\u003e\u0026quot;scripts\u0026quot;: {\u0026quot;build\u0026quot;: ...}\u003c/code\u003e with\nnpm 11.x.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3737\"\u003e#3737\u003c/a\u003e issue by \u003ca href=\"https://github.com/mheiges\"\u003e\u003ccode\u003e@​mheiges\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.6.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInstall \u003ccode\u003elanguage: node\u003c/code\u003e hooks via \u003ccode\u003egit\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003eFixes npm 12.x compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3719\"\u003e#3719\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3517\"\u003e#3517\u003c/a\u003e issue by \u003ca href=\"https://github.com/ojob\"\u003e\u003ccode\u003e@​ojob\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003eJULIA_DEPOT_PATH\u003c/code\u003e for \u003ccode\u003elanguage: julia\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3711\"\u003e#3711\u003c/a\u003e PR by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit-ci/runner-image/issues/335\"\u003epre-commit-ci/runner-image#335\u003c/a\u003e issue by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eProduce error on mistyped \u003ccode\u003e--repo\u003c/code\u003e for \u003ccode\u003epre-commit autoupdate\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3701\"\u003e#3701\u003c/a\u003e PR by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3695\"\u003e#3695\u003c/a\u003e issue by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eImprove performance of commit existence check in \u003ccode\u003epre-push\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3726\"\u003e#3726\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3604\"\u003e#3604\u003c/a\u003e issue by \u003ca href=\"https://github.com/ptarjan\"\u003e\u003ccode\u003e@​ptarjan\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAvoid duplicating conflicted filenames during \u003ccode\u003epre-commit run --all-files\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3727\"\u003e#3727\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3706\"\u003e#3706\u003c/a\u003e issue by \u003ca href=\"https://github.com/RomanValov\"\u003e\u003ccode\u003e@​RomanValov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.6.2 - 2026-08-10\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks that contain \u003ccode\u003e\u0026quot;scripts\u0026quot;: {\u0026quot;build\u0026quot;: ...}\u003c/code\u003e with\nnpm 11.x.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3737\"\u003e#3737\u003c/a\u003e issue by \u003ca href=\"https://github.com/mheiges\"\u003e\u003ccode\u003e@​mheiges\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.6.1 - 2026-07-21\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInstall \u003ccode\u003elanguage: node\u003c/code\u003e hooks via \u003ccode\u003egit\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003eFixes npm 12.x compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3719\"\u003e#3719\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3517\"\u003e#3517\u003c/a\u003e issue by \u003ca href=\"https://github.com/ojob\"\u003e\u003ccode\u003e@​ojob\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003eJULIA_DEPOT_PATH\u003c/code\u003e for \u003ccode\u003elanguage: julia\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3711\"\u003e#3711\u003c/a\u003e PR by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit-ci/runner-image/issues/335\"\u003epre-commit-ci/runner-image#335\u003c/a\u003e issue by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eProduce error on mistyped \u003ccode\u003e--repo\u003c/code\u003e for \u003ccode\u003epre-commit autoupdate\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3701\"\u003e#3701\u003c/a\u003e PR by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3695\"\u003e#3695\u003c/a\u003e issue by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eImprove performance of commit existence check in \u003ccode\u003epre-push\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3726\"\u003e#3726\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3604\"\u003e#3604\u003c/a\u003e issue by \u003ca href=\"https://github.com/ptarjan\"\u003e\u003ccode\u003e@​ptarjan\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAvoid duplicating conflicted filenames during \u003ccode\u003epre-commit run --all-files\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3727\"\u003e#3727\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3706\"\u003e#3706\u003c/a\u003e issue by \u003ca href=\"https://github.com/RomanValov\"\u003e\u003ccode\u003e@​RomanValov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9767b6c8211a6bf683875a0afcf2b390457a4b66\"\u003e\u003ccode\u003e9767b6c\u003c/code\u003e\u003c/a\u003e v4.6.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/42ee3ff5ac1cae639613c9ad002d0502ae82384f\"\u003e\u003ccode\u003e42ee3ff\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e from pre-commit/npm-build-scripts-11-x\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/30566198cb2d05201625f92b660a34c38ffe2dc7\"\u003e\u003ccode\u003e3056619\u003c/code\u003e\u003c/a\u003e fix \u003ccode\u003elanguage: node\u003c/code\u003e for hooks with build scripts and npm 11.x\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/242ce8a25657be59f2770b50de41fe0fd508820d\"\u003e\u003ccode\u003e242ce8a\u003c/code\u003e\u003c/a\u003e v4.6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/766e550cd31defcb6096a96735c9de299b0eb301\"\u003e\u003ccode\u003e766e550\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3727\"\u003e#3727\u003c/a\u003e from pre-commit/dedupe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/1558d06e3d9e5f495cd97ccaefe937b7c44ead70\"\u003e\u003ccode\u003e1558d06\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3726\"\u003e#3726\u003c/a\u003e from pre-commit/exists-faster\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/8a1c47a2528419e41aadfcf8135926d68f7ffbbb\"\u003e\u003ccode\u003e8a1c47a\u003c/code\u003e\u003c/a\u003e avoid duplicate files in --all-files during conflict\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2e01c999b2466ac7e14e1e4a57a04504bd6c1b28\"\u003e\u003ccode\u003e2e01c99\u003c/code\u003e\u003c/a\u003e faster check of rev existing locally as a commit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/3613bf27f5500d327de70cd2fa68fa20c8975659\"\u003e\u003ccode\u003e3613bf2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3701\"\u003e#3701\u003c/a\u003e from pre-commit/autoupdate-repos\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/1d811d9b0b655fa648001ca479a0b7da9ebd7b8c\"\u003e\u003ccode\u003e1d811d9\u003c/code\u003e\u003c/a\u003e Return an error for invalid --repo\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.6.0...v4.6.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-django` from 4.12.0 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/pytest-dev/pytest-django/releases\"\u003epytest-django's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.14.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pytest-django.readthedocs.io/en/stable/changelog.html#v4-14-0-2026-08-10\"\u003ehttps://pytest-django.readthedocs.io/en/stable/changelog.html#v4-14-0-2026-08-10\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.13.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pytest-django.readthedocs.io/en/latest/changelog.html#v4-13-0-2026-08-06\"\u003ehttps://pytest-django.readthedocs.io/en/latest/changelog.html#v4-13-0-2026-08-06\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/pytest-dev/pytest-django/blob/main/docs/changelog.rst\"\u003epytest-django's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.14.0 (2026-08-10)\u003c/h2\u003e\n\u003cp\u003eCompatibility\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRestored (unofficial) support for Django 5.0 and Django 5.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eImprovements\n^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a \u003ccode\u003edjango\u003c/code\u003e extra to the package. By depending on this extra\n(e.g. \u003ccode\u003epip install pytest-django[django]\u003c/code\u003e), the dependency resolver\nwill ensure you get a version of pytest-django that is compatible with\nyour version of Django (lower bound only). At least from now on...\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.13.0 (2026-08-06)\u003c/h2\u003e\n\u003cp\u003eCompatibility\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Django 4.2 and 5.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eImprovements\n^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eExport \u003ccode\u003epytest_django.Settings\u003c/code\u003e from the top-level \u003ccode\u003epytest_django\u003c/code\u003e\nmodule so the :fixture:\u003ccode\u003esettings\u003c/code\u003e fixture can be type-annotated\n(\u003ccode\u003e[#1257](https://github.com/pytest-dev/pytest-django/issues/1257) \u0026lt;https://github.com/pytest-dev/pytest-django/issues/1257\u0026gt;\u003c/code\u003e__).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBugfixes\n^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed type hints of assert methods to match actual signature (\u003ccode\u003ePR [#1271](https://github.com/pytest-dev/pytest-django/issues/1271) \u0026lt;https://github.com/pytest-dev/pytest-django/pull/1271\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eHandled Django 6.2's \u003ccode\u003eImproperlyConfigured\u003c/code\u003e (in addition to \u003ccode\u003eImportError\u003c/code\u003e) when the configured \u003ccode\u003eDJANGO_SETTINGS_MODULE\u003c/code\u003e cannot be imported, so pytest-django still shows its guidance message.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003edjango_db(transaction=True)\u003c/code\u003e tests being set up twice, which repeated the \u003ccode\u003eserialized_rollback\u003c/code\u003e restore and the \u003ccode\u003efixtures\u003c/code\u003e load, and sent \u003ccode\u003esetting_changed\u003c/code\u003e and \u003ccode\u003epost_migrate\u003c/code\u003e twice when \u003ccode\u003eavailable_apps\u003c/code\u003e is set.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003e--help\u003c/code\u003e/\u003ccode\u003e--version\u003c/code\u003e failing with \u003ccode\u003eAppRegistryNotReady\u003c/code\u003e (surfaced as a \u003ccode\u003ecould not load initial conftests\u003c/code\u003e warning) when a \u003ccode\u003econftest.py\u003c/code\u003e imports Django models at the top level. Django is now set up even when \u003ccode\u003e--help\u003c/code\u003e/\u003ccode\u003e--version\u003c/code\u003e are passed, before the initial conftests are loaded for these options (\u003ccode\u003e[#1152](https://github.com/pytest-dev/pytest-django/issues/1152) \u0026lt;https://github.com/pytest-dev/pytest-django/issues/1152\u0026gt;\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/pytest-dev/pytest-django/commit/1a6b6121c7f1f20e2a32c5f1ece7b6671160b968\"\u003e\u003ccode\u003e1a6b612\u003c/code\u003e\u003c/a\u003e Release 4.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/fffb11d199a4f59e5acec5cb42a8ca257ce987e2\"\u003e\u003ccode\u003efffb11d\u003c/code\u003e\u003c/a\u003e docs: remove $ for consistency\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/e8c0606c3871db20f2273bd700c8a51337205622\"\u003e\u003ccode\u003ee8c0606\u003c/code\u003e\u003c/a\u003e docs: move the \u003ccode\u003edjango\u003c/code\u003e extra explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/b66deb68fd5820a763005b5e689821737031524a\"\u003e\u003ccode\u003eb66deb6\u003c/code\u003e\u003c/a\u003e tests: strict import to make pyright happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/823db395089fe268641417de452404162580a7ce\"\u003e\u003ccode\u003e823db39\u003c/code\u003e\u003c/a\u003e tests: fix wrong type (typing only)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/a1eaf5dcdc191b6e95a4d552e30c0aa54d7febf2\"\u003e\u003ccode\u003ea1eaf5d\u003c/code\u003e\u003c/a\u003e Drop django\u0026lt;5 message asserts compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/2ea14230006228f0896b7c785400f17347bdf612\"\u003e\u003ccode\u003e2ea1423\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003e_pre_setup_ran_eagerly\u003c/code\u003e on Django 5.0 and 5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/903429ca05f98dd78b9f24c2ce84e80be24c01c2\"\u003e\u003ccode\u003e903429c\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003edjango\u003c/code\u003e extra to ensure Django dependency compatible lower bound\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/96615893af607fb89fb568445bfedb7783c7aeb0\"\u003e\u003ccode\u003e9661589\u003c/code\u003e\u003c/a\u003e docs: prefer newer pytest config TOML format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/76461962b11e3740dddf9185a4a4985e7f40cf63\"\u003e\u003ccode\u003e7646196\u003c/code\u003e\u003c/a\u003e docs: remove needless comment\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-django/compare/v4.12.0...v4.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.21 to 0.16.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.16.4\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-20.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-use-pathlib\u003c/code\u003e] Add autofix for \u003ccode\u003ePTH116\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26460\"\u003e#26460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Restrict \u003ccode\u003edelete-full-slice\u003c/code\u003e to lists (\u003ccode\u003eFURB131\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27711\"\u003e#27711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Skip \u003ccode\u003eFURB101\u003c/code\u003e and \u003ccode\u003eFURB103\u003c/code\u003e when the \u003ccode\u003eopen\u003c/code\u003e argument is a file descriptor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27643\"\u003e#27643\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eInvalidInstruction\u003c/code\u003e on Windows CPUs that do not support \u003ccode\u003ePOPCNT\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27803\"\u003e#27803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Emit semantic syntax errors in string type definitions as \u003ccode\u003eF722\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27835\"\u003e#27835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Allow \u003ccode\u003eos._exit\u003c/code\u003e imports in \u003ccode\u003eimport-private-name\u003c/code\u003e (\u003ccode\u003ePLC2701\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27738\"\u003e#27738\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[syntax-errors] Align mixed t-string/bytes error message with CPython 3.14 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27766\"\u003e#27766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003ectypes.LittleEndianStructure\u003c/code\u003e and related types to existing exception (\u003ccode\u003eRUF012\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27753\"\u003e#27753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[syntax-errors] Detect duplicate keyword arguments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/17804\"\u003e#17804\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[syntax-errors] Detect parameters declared \u003ccode\u003enonlocal\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27628\"\u003e#27628\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOffer display-only fixes and mark safe fixes preferred (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27807\"\u003e#27807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport pull diagnostics for notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27779\"\u003e#27779\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd default indicator to rules table (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27724\"\u003e#27724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix broken link to Python docs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27757\"\u003e#27757\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix s390x stacker assembly in release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27776\"\u003e#27776\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGuarantee minimum stack size when parsing a module, standalone expression, and suites (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25464\"\u003e#25464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce configuration deserialization code size (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27924\"\u003e#27924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCheck packed AST index bounds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27849\"\u003e#27849\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AbhinavMir\"\u003e\u003ccode\u003e@​AbhinavMir\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eduardorittner\"\u003e\u003ccode\u003e@​eduardorittner\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/royb3\"\u003e\u003ccode\u003e@​royb3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carljm\"\u003e\u003ccode\u003e@​carljm\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rosstitmarsh\"\u003e\u003ccode\u003e@​rosstitmarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.16.4\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-20.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-use-pathlib\u003c/code\u003e] Add autofix for \u003ccode\u003ePTH116\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26460\"\u003e#26460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Restrict \u003ccode\u003edelete-full-slice\u003c/code\u003e to lists (\u003ccode\u003eFURB131\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27711\"\u003e#27711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Skip \u003ccode\u003eFURB101\u003c/code\u003e and \u003ccode\u003eFURB103\u003c/code\u003e when the \u003ccode\u003eopen\u003c/code\u003e argument is a file descriptor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27643\"\u003e#27643\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eInvalidInstruction\u003c/code\u003e on Windows CPUs that do not support \u003ccode\u003ePOPCNT\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27803\"\u003e#27803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Emit semantic syntax errors in string type definitions as \u003ccode\u003eF722\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27835\"\u003e#27835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Allow \u003ccode\u003eos._exit\u003c/code\u003e imports in \u003ccode\u003eimport-private-name\u003c/code\u003e (\u003ccode\u003ePLC2701\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27738\"\u003e#27738\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[syntax-errors] Align mixed t-string/bytes error message with CPython 3.14 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27766\"\u003e#27766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003ectypes.LittleEndianStructure\u003c/code\u003e and related types to existing exception (\u003ccode\u003eRUF012\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27753\"\u003e#27753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[syntax-errors] Detect duplicate keyword arguments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/17804\"\u003e#17804\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[syntax-errors] Detect parameters declared \u003ccode\u003enonlocal\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27628\"\u003e#27628\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOffer display-only fixes and mark safe fixes preferred (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27807\"\u003e#27807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport pull diagnostics for notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27779\"\u003e#27779\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd default indicator to rules table (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27724\"\u003e#27724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix broken link to Python docs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27757\"\u003e#27757\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix s390x stacker assembly in release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27776\"\u003e#27776\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGuarantee minimum stack size when parsing a module, standalone expression, and suites (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25464\"\u003e#25464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce configuration deserialization code size (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27924\"\u003e#27924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCheck packed AST index bounds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27849\"\u003e#27849\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AbhinavMir\"\u003e\u003ccode\u003e@​AbhinavMir\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eduardorittner\"\u003e\u003ccode\u003e@​eduardorittner\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/royb3\"\u003e\u003ccode\u003e@​royb3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carljm\"\u003e\u003ccode\u003e@​carljm\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rosstitmarsh\"\u003e\u003ccode\u003e@​rosstitmarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zaniebot\"\u003e\u003ccode\u003e@​zaniebot\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/11c76bf48fdac06b2f240cba502eda96da4dce77\"\u003e\u003ccode\u003e11c76bf\u003c/code\u003e\u003c/a\u003e Bump 0.16.4 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27937\"\u003e#27937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d53c8c58662ca0576ddd502aa1a2979acf03832f\"\u003e\u003ccode\u003ed53c8c5\u003c/code\u003e\u003c/a\u003e Isolate playground builds from deployment credentials (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27839\"\u003e#27839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/cab001e5dec22f55653021f1f7be449e47c7d81e\"\u003e\u003ccode\u003ecab001e\u003c/code\u003e\u003c/a\u003e Disable uv preview for releases and pre-commit hooks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27939\"\u003e#27939\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f8d575fedc97e75ea62c679d77afb14246afa88e\"\u003e\u003ccode\u003ef8d575f\u003c/code\u003e\u003c/a\u003e [ty] Clarify writing guidance for human readers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27912\"\u003e#27912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ca45faebb1750a213df19ed7f686ee5cf9277f93\"\u003e\u003ccode\u003eca45fae\u003c/code\u003e\u003c/a\u003e Set \u003ccode\u003e--preview\u003c/code\u003e and \u003ccode\u003e--default-index\u003c/code\u003e for the \u003ccode\u003euv-lock\u003c/code\u003e hook (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27935\"\u003e#27935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4827bf7cb449055e46fbfaf4b26e5125883a0569\"\u003e\u003ccode\u003e4827bf7\u003c/code\u003e\u003c/a\u003e Export \u003ccode\u003eUV_DEFAULT_INDEX\u003c/code\u003e in \u003ccode\u003erelease.sh\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27934\"\u003e#27934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d1087a4b9e03d253a88703f34e0869ee4b805456\"\u003e\u003ccode\u003ed1087a4\u003c/code\u003e\u003c/a\u003e [ty] Handle assignment expressions in string annotations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27921\"\u003e#27921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/680cce48b6d89ab5b1566e4b797bd4847d861815\"\u003e\u003ccode\u003e680cce4\u003c/code\u003e\u003c/a\u003e [ty] Optimize inherited recursive protocol comparisons (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27922\"\u003e#27922\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/974d3cbc04520c112843d6b92577844587402e04\"\u003e\u003ccode\u003e974d3cb\u003c/code\u003e\u003c/a\u003e Upgrade ecosystem-analyzer and mypy_primer to the latest upstream pins (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27932\"\u003e#27932\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b169b402356d0676451f4a7bc6903da2644b31eb\"\u003e\u003ccode\u003eb169b40\u003c/code\u003e\u003c/a\u003e Install cargo tools locked (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27929\"\u003e#27929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.16.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `semgrep` from 1.169.0 to 1.174.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/semgrep/semgrep/releases\"\u003esemgrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.174.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.174.0\"\u003e1.174.0\u003c/a\u003e - 2026-08-20\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDiff scans now report which dependency source files were added or modified relative to the merge base. (changed-dependency-sources)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePartial scans (\u003ccode\u003e--x-partial-scan-rule-id\u003c/code\u003e) now resolve dependencies only for\nsubprojects whose ecosystem is evaluated by the rules being run. Subprojects in\nany other ecosystem are skipped and reported to semgrep-app as skipped\nsubprojects. (SC-3830)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.173.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.173.0\"\u003e1.173.0\u003c/a\u003e - 2026-08-12\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esemgrep-core -version\u003c/code\u003e now reports the git commit that the binary was built\nfrom. (core-version-git-sha)\u003c/li\u003e\n\u003cli\u003ePro: Added a \u003ccode\u003eno_disk_cache\u003c/code\u003e memory policy (\u003ccode\u003e--x-mem-policy no_disk_cache\u003c/code\u003e) to trade higher memory usage for not caching intermediary scan data structures on disk. (no-disk-cache-memory-policy)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFile targeting now submits path-filtering work to worker domains in batches\nremoving multithreaded synchronization overhead for very large repos. (ENGINE-2854)\u003c/li\u003e\n\u003cli\u003eParallel rule parsing for large rulesets now shards rules into files sized by\nbytes rather than by worker count, stabilizing memory allocations at parse-time\nand improving parsing throughput. (ENGINE-2920)\u003c/li\u003e\n\u003cli\u003eUpdated the Solidity parser for newer language features (transient storage, named mapping parameters, \u003ccode\u003elayout at\u003c/code\u003e, assembly flags, \u003ccode\u003eglobal\u003c/code\u003e using-directives, EVM Cancun builtins) and corrected ternary/\u003ccode\u003e?:\u003c/code\u003e vs member-access precedence. (LANG-207)\u003c/li\u003e\n\u003cli\u003ePro: Unsupported patterns in case expressions are now handled more\nrobustly, with improved error recovery during taint analysis — branch\nbodies are no longer dropped from the dataflow intermediate language when\na pattern can't be compiled. Pattern matching in statement position also\nnow benefits from the same compilation as expression position. (LANG-598)\u003c/li\u003e\n\u003cli\u003eImproved performance in highly parallel scans with many target files, running\non systems using the musl libc implementation. (pcre2-match-data-reuse)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWhen the internal semgrep-core RPC subprocess is terminated by a signal (for\nexample an out-of-memory kill or a segfault), Semgrep now logs a clear error\nnaming the signal, instead of the misleading \u0026quot;Expected a number, got ''\u0026quot;\nmessage. When debug logging is enabled, the tail of the subprocess's stderr is\nincluded as well. (rpc-subprocess-death-diagnostics)\u003c/li\u003e\n\u003cli\u003eA target file whose path filtering failed was silently omitted from the scan,\nappearing in neither the results nor the list of skipped targets. Such paths\nare now retried, and any that still fail are reported as skipped targets so\nthey show up in the scan report. (ENGINE-2854)\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/semgrep/semgrep/blob/develop/CHANGELOG.md\"\u003esemgrep's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.174.0\"\u003e1.174.0\u003c/a\u003e - 2026-08-20\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDiff scans now report which dependency source files were added or modified relative to the merge base. (changed-dependency-sources)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePartial scans (\u003ccode\u003e--x-partial-scan-rule-id\u003c/code\u003e) now resolve dependencies only for\nsubprojects whose ecosystem is evaluated by the rules being run. Subprojects in\nany other ecosystem are skipped and reported to semgrep-app as skipped\nsubprojects. (SC-3830)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.173.0\"\u003e1.173.0\u003c/a\u003e - 2026-08-12\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esemgrep-core -version\u003c/code\u003e now reports the git commit that the binary was built\nfrom. (core-version-git-sha)\u003c/li\u003e\n\u003cli\u003ePro: Added a \u003ccode\u003eno_disk_cache\u003c/code\u003e memory policy (\u003ccode\u003e--x-mem-policy no_disk_cache\u003c/code\u003e) to trade higher memory usage for not caching intermediary scan data structures on disk. (no-disk-cache-memory-policy)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFile targeting now submits path-filtering work to worker domains in batches\nremoving multithreaded synchronization overhead for very large repos. (ENGINE-2854)\u003c/li\u003e\n\u003cli\u003eParallel rule parsing for large rulesets now shards rules into files sized by\nbytes rather than by worker count, stabilizing memory allocations at parse-time\nand improving parsing throughput. (ENGINE-2920)\u003c/li\u003e\n\u003cli\u003eUpdated the Solidity parser for newer language features (transient storage, named mapping parameters, \u003ccode\u003elayout at\u003c/code\u003e, assembly flags, \u003ccode\u003eglobal\u003c/code\u003e using-directives, EVM Cancun builtins) and corrected ternary/\u003ccode\u003e?:\u003c/code\u003e vs member-access precedence. (LANG-207)\u003c/li\u003e\n\u003cli\u003ePro: Unsupported patterns in case expressions are now handled more\nrobustly, with improved error recovery during taint analysis — branch\nbodies are no longer dropped from the dataflow intermediate language when\na pattern can't be compiled. Pattern matching in statement position also\nnow benefits from the same compilation as expression position. (LANG-598)\u003c/li\u003e\n\u003cli\u003eImproved performance in highly parallel scans with many target files, running\non systems using the musl libc implementation. (pcre2-match-data-reuse)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWhen the internal semgrep-core RPC subprocess is terminated by a signal (for\nexample an out-of-memory kill or a segfault), Semgrep now logs a clear error\nnaming the signal, instead of the misleading \u0026quot;Expected a number, got ''\u0026quot;\nmessage. When debug logging is enabled, the tail of the subprocess's stderr is\nincluded as well. (rpc-subprocess-death-diagnostics)\u003c/li\u003e\n\u003cli\u003eA target file whose path filtering failed was silently omitted from the scan,\nappearing in neither the results nor the list of skipped targets. Such paths\nare now retried, and any that still fail are reported as skipped targets so\nthey show up in the scan report. (ENGINE-2854)\u003c/li\u003e\n\u003cli\u003eFixed a bug where a capture-group \u003ccode\u003emetavariable-regex\u003c/code\u003e or a binding-introducing\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/semgrep/semgrep/commit/829b72f16f5148e171059ed74518d2324294d1f1\"\u003e\u003ccode\u003e829b72f\u003c/code\u003e\u003c/a\u003e chore: release 1.174.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/3f58c662ec05a8dbb67d4779cfbca1be8396d738\"\u003e\u003ccode\u003e3f58c66\u003c/code\u003e\u003c/a\u003e feat(sca): add dependency_source_edited to run_scan return (semgrep/semgrep-p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/7ccb226f46172e486ccf3aa2522734c848f39447\"\u003e\u003ccode\u003e7ccb226\u003c/code\u003e\u003c/a\u003e feat(mal): SSC IR Scans Resolve Relevant Ecosystems Only (semgrep/semgrep-pro...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/808ee51cda4f91d118fab80a411522e2cbbdc2fe\"\u003e\u003ccode\u003e808ee51\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat: add severity to core json output\u0026quot; (semgrep/semgrep-proprietary#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/53e388494cee7a7f48ee7cc70004dc565d8f08e2\"\u003e\u003ccode\u003e53e3884\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6882\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/68f05877f5256789cd749fef536d1087231482de\"\u003e\u003ccode\u003e68f0587\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6875\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/cc97b5c47dacabe76be343ef981204b8c1f60e07\"\u003e\u003ccode\u003ecc97b5c\u003c/code\u003e\u003c/a\u003e fix: drop duplicate finding with unsubstituted metavariable (ENGINE-2932) (se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/f66f2da0ad7650a58b5bb601f2439ccc01f07d7b\"\u003e\u003ccode\u003ef66f2da\u003c/code\u003e\u003c/a\u003e fix(mcp): pin encoding and use replace to handle errors (semgrep/semgrep-prop...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/0e77f5bac7d5f84e044beab98fc2814cba245a9b\"\u003e\u003ccode\u003e0e77f5b\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6675\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/91b912403bb847ee3eabca43cb2fc15ef5f93152\"\u003e\u003ccode\u003e91b9124\u003c/code\u003e\u003c/a\u003e feat(core): show git commit sha in semgrep-core -version (semgrep/semgrep-pro...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/semgrep/semgrep/compare/v1.169.0...v1.174.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/twschiller/ma-agent-eval/pull/55","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/twschiller%2Fma-agent-eval/issues/55","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/55/packages"},{"uuid":"5282841140","node_id":"PR_kwDOS7Plt88AAAABBZP0KQ","number":31,"state":"closed","title":"Bump the dependencies group across 3 directories with 84 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-09-04T22:31:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-28T22:37:03.000Z","updated_at":"2026-09-04T22:31:04.000Z","time_to_close":604440,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"dependencies","update_count":84,"packages":[{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.1","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.5.1","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"coverage","old_version":"7.14.1","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django","old_version":"5.2.15","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-silk","old_version":"5.5.0","new_version":"5.5.2","repository_url":"https://github.com/jazzband/django-silk"},{"name":"django-stubs","old_version":"6.0.5","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-stubs-ext","old_version":"6.0.5","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-test-migrations","old_version":"1.5.0","new_version":"1.6.0","repository_url":"https://github.com/wemake-services/django-test-migrations"},{"name":"idna","old_version":"3.18","new_version":"3.19","repository_url":"https://github.com/kjd/idna"},{"name":"packaging","old_version":"26.2","new_version":"26.3","repository_url":"https://github.com/pypa/packaging"},{"name":"pip","old_version":"26.1.2","new_version":"26.2.1","repository_url":"https://github.com/pypa/pip"},{"name":"pip-tools","old_version":"7.5.3","new_version":"7.6.1","repository_url":"https://github.com/jazzband/pip-tools"},{"name":"prek","old_version":"0.4.4","new_version":"0.4.14","repository_url":"https://github.com/j178/prek"},{"name":"pygments","old_version":"2.20.0","new_version":"2.21.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"setuptools","old_version":"82.0.1","new_version":"84.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"sqlparse","old_version":"0.5.5","new_version":"0.6.0","repository_url":"https://github.com/andialbrecht/sqlparse"},{"name":"ty","old_version":"0.0.1a21","new_version":"0.0.73","repository_url":"https://github.com/astral-sh/ty"},{"name":"types-psycopg2","old_version":"2.9.21.20260518","new_version":"2.9.21.20260724","repository_url":"https://github.com/python/typeshed"},{"name":"types-pyyaml","old_version":"6.0.12.20260518","new_version":"6.0.12.20260815","repository_url":"https://github.com/python/typeshed"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"wheel","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/pypa/wheel"},{"name":"blessed","old_version":"1.44.0","new_version":"1.48.0","repository_url":"https://github.com/jquast/blessed"},{"name":"boto3","old_version":"1.43.23","new_version":"1.43.78","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.23","new_version":"1.43.78","repository_url":"https://github.com/boto/botocore"},{"name":"django-allauth","old_version":"65.14.3","new_version":"65.19.1","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1","repository_url":"https://github.com/anymail/django-anymail"},{"name":"django-filter","old_version":"25.2","new_version":"26.1","repository_url":"https://github.com/carltongibson/django-filter"},{"name":"django-js-asset","old_version":"3.1.2","new_version":"4.0.2","repository_url":"https://github.com/feincms/django-js-asset"},{"name":"django-maintenance-mode","old_version":"0.22.0","new_version":"0.23.0","repository_url":"https://github.com/fabiocaccamo/django-maintenance-mode"},{"name":"django-money","old_version":"3.6.0","new_version":"3.6.1","repository_url":"https://github.com/django-money/django-money"},{"name":"django-oauth-toolkit","old_version":"3.3.0","new_version":"3.4.1","repository_url":"https://github.com/django-oauth/django-oauth-toolkit"},{"name":"django-otp","old_version":"1.3.0","new_version":"1.7.0","repository_url":"https://github.com/django-otp/django-otp"},{"name":"django-q2","old_version":"1.10.0","new_version":"1.11.0","repository_url":"https://github.com/GDay/django-q2"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"dulwich","old_version":"1.2.6","new_version":"1.2.12","repository_url":"https://github.com/dulwich/dulwich"},{"name":"feedparser","old_version":"6.0.12","new_version":"6.0.14","repository_url":"https://github.com/kurtmckee/feedparser"},{"name":"fido2","old_version":"2.2.0","new_version":"2.2.1","repository_url":"https://github.com/Yubico/python-fido2"},{"name":"googleapis-common-protos","old_version":"1.75.0","new_version":"1.75.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.81.0","new_version":"1.83.0","repository_url":"https://github.com/grpc/grpc"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"icalendar","old_version":"7.1.2","new_version":"7.3.0","repository_url":"https://github.com/collective/icalendar"},{"name":"jinxed","old_version":"2.0.4","new_version":"2.1.0","repository_url":"https://github.com/Rockhopper-Technologies/jinxed"},{"name":"jwcrypto","old_version":"1.5.7","new_version":"1.5.8","repository_url":"https://github.com/latchset/jwcrypto"},{"name":"lxml","old_version":"6.1.1","new_version":"6.1.2","repository_url":"https://github.com/lxml/lxml"},{"name":"markdown","old_version":"3.10.2","new_version":"3.10.3","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"nh3","old_version":"0.3.5","new_version":"0.3.6","repository_url":"https://github.com/messense/nh3"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.42.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.42.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.42.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.63b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-dbapi","old_version":"0.63b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.42.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.63b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.63b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"platformdirs","old_version":"4.10.0","new_version":"4.11.3","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"prettytable","old_version":"3.17.0","new_version":"3.18.0","repository_url":"https://github.com/prettytable/prettytable"},{"name":"protobuf","old_version":"6.33.6","new_version":"7.36.0","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pypdf","old_version":"6.13.0","new_version":"6.16.1","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"pyphen","old_version":"0.17.2","new_version":"0.18.1","repository_url":"https://github.com/Kozea/Pyphen"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-fsutil","old_version":"0.16.1","new_version":"0.17.0","repository_url":"https://github.com/fabiocaccamo/python-fsutil"},{"name":"redis","old_version":"8.0.0","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"rpds-py","old_version":"2026.5.1","new_version":"2026.6.3","repository_url":"https://github.com/crate-py/rpds"},{"name":"s3transfer","old_version":"0.18.0","new_version":"0.19.2","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.61.1","new_version":"2.68.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"structlog","old_version":"25.5.0","new_version":"26.1.0","repository_url":"https://github.com/hynek/structlog"},{"name":"tablib","old_version":"3.9.0","new_version":"3.10.0","repository_url":"https://github.com/jazzband/tablib"},{"name":"tqdm","old_version":"4.68.1","new_version":"4.70.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"tzdata","old_version":"2026.2","new_version":"2026.3","repository_url":"https://github.com/python/tzdata"},{"name":"wcwidth","old_version":"0.7.0","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"webencodings","old_version":"0.5.1","new_version":"0.6.1","repository_url":"https://github.com/CourtBouillon/webencodings"},{"name":"wrapt","old_version":"1.17.3","new_version":"2.3.0","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"zopfli","old_version":"0.4.2","new_version":"0.4.3","repository_url":"https://github.com/fonttools/py-zopfli"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dependencies group with 1 update in the /contrib/dev_reqs directory: [jc](https://github.com/kellyjonbrazil/jc).\nBumps the dependencies group with 3 updates in the /docs directory: [mkdocs-git-revision-date-localized-plugin](https://github.com/timvink/mkdocs-git-revision-date-localized-plugin), [mkdocs-material](https://github.com/squidfunk/mkdocs-material) and [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings).\nBumps the dependencies group with 80 updates in the /src/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.7.22` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.1` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.5.1` |\n| [click](https://github.com/pallets/click) | `8.4.1` | `8.4.2` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.1` | `7.15.4` |\n| [django](https://github.com/django/django) | `5.2.15` | `6.1` |\n| [django-silk](https://github.com/jazzband/django-silk) | `5.5.0` | `5.5.2` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.5` | `6.1.0` |\n| [django-stubs-ext](https://github.com/typeddjango/django-stubs) | `6.0.5` | `6.1.0` |\n| [django-test-migrations](https://github.com/wemake-services/django-test-migrations) | `1.5.0` | `1.6.0` |\n| [idna](https://github.com/kjd/idna) | `3.18` | `3.19` |\n| [packaging](https://github.com/pypa/packaging) | `26.2` | `26.3` |\n| [pip](https://github.com/pypa/pip) | `26.1.2` | `26.2.1` |\n| [pip-tools](https://github.com/jazzband/pip-tools) | `7.5.3` | `7.6.1` |\n| [prek](https://github.com/j178/prek) | `0.4.4` | `0.4.14` |\n| [pygments](https://github.com/pygments/pygments) | `2.20.0` | `2.21.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `84.0.0` |\n| [sqlparse](https://github.com/andialbrecht/sqlparse) | `0.5.5` | `0.6.0` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.1a21` | `0.0.73` |\n| [types-psycopg2](https://github.com/python/typeshed) | `2.9.21.20260518` | `2.9.21.20260724` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20260518` | `6.0.12.20260815` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [wheel](https://github.com/pypa/wheel) | `0.47.0` | `0.48.0` |\n| [blessed](https://github.com/jquast/blessed) | `1.44.0` | `1.48.0` |\n| [boto3](https://github.com/boto/boto3) | `1.43.23` | `1.43.78` |\n| [botocore](https://github.com/boto/botocore) | `1.43.23` | `1.43.78` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.14.3` | `65.19.1` |\n| [django-anymail](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-filter](https://github.com/carltongibson/django-filter) | `25.2` | `26.1` |\n| [django-js-asset](https://github.com/feincms/django-js-asset) | `3.1.2` | `4.0.2` |\n| [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) | `0.22.0` | `0.23.0` |\n| [django-money](https://github.com/django-money/django-money) | `3.6.0` | `3.6.1` |\n| [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) | `3.3.0` | `3.4.1` |\n| [django-otp](https://github.com/django-otp/django-otp) | `1.3.0` | `1.7.0` |\n| [django-q2](https://github.com/GDay/django-q2) | `1.10.0` | `1.11.0` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `1.2.6` | `1.2.12` |\n| [feedparser](https://github.com/kurtmckee/feedparser) | `6.0.12` | `6.0.14` |\n| [fido2](https://github.com/Yubico/python-fido2) | `2.2.0` | `2.2.1` |\n| [googleapis-common-protos](https://github.com/googleapis/google-cloud-python) | `1.75.0` | `1.75.1` |\n| [grpcio](https://github.com/grpc/grpc) | `1.81.0` | `1.83.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [icalendar](https://github.com/collective/icalendar) | `7.1.2` | `7.3.0` |\n| [jinxed](https://github.com/Rockhopper-Technologies/jinxed) | `2.0.4` | `2.1.0` |\n| [jwcrypto](https://github.com/latchset/jwcrypto) | `1.5.7` | `1.5.8` |\n| [lxml](https://github.com/lxml/lxml) | `6.1.1` | `6.1.2` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.10.2` | `3.10.3` |\n| [nh3](https://github.com/messense/nh3) | `0.3.5` | `0.3.6` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.42.1` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.42.1` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.42.1` | `1.44.0` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.63b1` | `0.65b0` |\n| [opentelemetry-instrumentation-dbapi](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.63b1` | `0.65b0` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.42.1` | `1.44.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.63b1` | `0.65b0` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.63b1` | `0.65b0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.10.0` | `4.11.3` |\n| [prettytable](https://github.com/prettytable/prettytable) | `3.17.0` | `3.18.0` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.6` | `7.36.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.13.0` | `6.16.1` |\n| [pyphen](https://github.com/Kozea/Pyphen) | `0.17.2` | `0.18.1` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [python-fsutil](https://github.com/fabiocaccamo/python-fsutil) | `0.16.1` | `0.17.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.0` | `8.1.0` |\n| [rpds-py](https://github.com/crate-py/rpds) | `2026.5.1` | `2026.6.3` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.18.0` | `0.19.2` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.61.1` | `2.68.0` |\n| [structlog](https://github.com/hynek/structlog) | `25.5.0` | `26.1.0` |\n| [tablib](https://github.com/jazzband/tablib) | `3.9.0` | `3.10.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.1` | `4.70.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.2` | `2026.3` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.7.0` | `0.8.2` |\n| [webencodings](https://github.com/CourtBouillon/webencodings) | `0.5.1` | `0.6.1` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `1.17.3` | `2.3.0` |\n| [zopfli](https://github.com/fonttools/py-zopfli) | `0.4.2` | `0.4.3` |\n\n\nUpdates `jc` from 1.25.6 to 1.25.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kellyjonbrazil/jc/releases\"\u003ejc's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eJC version 1.25.7\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e, and \u003ccode\u003etsv-ih\u003c/code\u003e file parsers for CSV files without headers,\nTSV files, and TSV files without headers. Note that these are standard and\nnot streaming parsers so the entire CSV/TSV will be loaded into memory. For\nlazy loading equivalents, see below.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih-s\u003c/code\u003e, \u003ccode\u003etsv-s\u003c/code\u003e, and \u003ccode\u003etsv-ih-s\u003c/code\u003e streaming file parsers for CSV files\nwithout headers, TSV files, and TSV files without headers. These streaming\nparsers will lazily load the data into memory and may be more suitable for\nextremely large files.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etypeset\u003c/code\u003e and \u003ccode\u003edeclare\u003c/code\u003e Bash internal command parser to convert variables\nsimple arrays, and associative arrays along with object metadata\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003epip-show\u003c/code\u003e command parser to add \u003ccode\u003e-f\u003c/code\u003e show files support\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003ersync\u003c/code\u003e and \u003ccode\u003ersync-s\u003c/code\u003e parsers to add \u003ccode\u003e--stats\u003c/code\u003e or \u003ccode\u003e--info=stats[1-3]\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecertbot\u003c/code\u003e command parser to allow parsing of named certs\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edir\u003c/code\u003e command parser for incorrect stripping of the \u003ccode\u003eD:\u003c/code\u003e drive letter\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ehashsum\u003c/code\u003e command parser to correctly parse the \u003ccode\u003emode\u003c/code\u003e indicator\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eifconfig\u003c/code\u003e command parser for incorrect stripping of leading zeros in some hex numbers\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eiptables\u003c/code\u003e command parser when Target is blank and verbose output is used\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsattr\u003c/code\u003e command parser for filenames with spaces (newlines in filenames are\nstill not supported)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eproc-pid-smaps\u003c/code\u003e proc parser when unknown VmFlags are output\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ejc.utils.timestamp\u003c/code\u003e function and tests for behavior change in python 3.15\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eufw\u003c/code\u003e command parser to support rule logging. A new boolean \u003ccode\u003elog\u003c/code\u003e field is introduced\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/kellyjonbrazil/jc/blob/master/CHANGELOG\"\u003ejc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ejc changelog\u003c/p\u003e\n\u003cp\u003e20260617 v1.25.7\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e, and \u003ccode\u003etsv-ih\u003c/code\u003e file parsers for CSV files without headers,\nTSV files, and TSV files without headers. Note that these are standard and\nnot streaming parsers so the entire CSV/TSV will be loaded into memory. For\nlazy loading equivalents, see below.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih-s\u003c/code\u003e, \u003ccode\u003etsv-s\u003c/code\u003e, and \u003ccode\u003etsv-ih-s\u003c/code\u003e streaming file parsers for CSV files\nwithout headers, TSV files, and TSV files without headers. These streaming\nparsers will lazily load the data into memory and may be more suitable for\nextremely large files.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etypeset\u003c/code\u003e and \u003ccode\u003edeclare\u003c/code\u003e Bash internal command parser to convert variables\nsimple arrays, and associative arrays along with object metadata\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003epip-show\u003c/code\u003e command parser to add \u003ccode\u003e-f\u003c/code\u003e show files support\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003ersync\u003c/code\u003e and \u003ccode\u003ersync-s\u003c/code\u003e parsers to add \u003ccode\u003e--stats\u003c/code\u003e or \u003ccode\u003e--info=stats[1-3]\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecertbot\u003c/code\u003e command parser to allow parsing of named certs\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edir\u003c/code\u003e command parser for incorrect stripping of the \u003ccode\u003eD:\u003c/code\u003e drive letter\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ehashsum\u003c/code\u003e command parser to correctly parse the \u003ccode\u003emode\u003c/code\u003e indicator\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eifconfig\u003c/code\u003e command parser for incorrect stripping of leading zeros in some hex numbers\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eiptables\u003c/code\u003e command parser when Target is blank and verbose output is used\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsattr\u003c/code\u003e command parser for filenames with spaces (newlines in filenames are\nstill not supported)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eproc-pid-smaps\u003c/code\u003e proc parser when unknown VmFlags are output\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ejc.utils.timestamp\u003c/code\u003e function and tests for behavior change in python 3.15\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eufw\u003c/code\u003e command parser to support rule logging. A new boolean \u003ccode\u003elog\u003c/code\u003e field is introduced\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20251012 v1.25.6\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003enet-localgroup\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enet-user\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eroute-print\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etraceroute-s\u003c/code\u003e streaming command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003emax_hops\u003c/code\u003e and \u003ccode\u003edata_bytes\u003c/code\u003e fields to \u003ccode\u003etraceroute\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ex509-crl\u003c/code\u003e file parser to support Certificate Revocation List PEM and DER files\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eyay\u003c/code\u003e as a magic command for the \u003ccode\u003epacman\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebluetoothctl\u003c/code\u003e command parser to support output with the \u003ccode\u003ecable_pairing\u003c/code\u003e attribute\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enmcli\u003c/code\u003e command parser to support blank \u003ccode\u003eteam.config\u003c/code\u003e JSON value and \u003ccode\u003eteam-port.config\u003c/code\u003e JSON value\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003etop\u003c/code\u003e command parsers to correct memory size field parsing. Several new unit\nand byte conversion fields have been added\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ewho\u003c/code\u003e command parser to support the \u003ccode\u003eprocess\u003c/code\u003e field on Debian13\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20250503 v1.25.5\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eamixer\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003eiptables\u003c/code\u003e command parser to add default policy statistics fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebluetoothctl\u003c/code\u003e parser failing to parse controllers with power state prop\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsblk\u003c/code\u003e command parser to support multiple mountpoints. Also, added\nbyte conversions for size fields.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enmcli\u003c/code\u003e command parser to support \u003ccode\u003eteam.config\u003c/code\u003e JSON field\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003etime\u003c/code\u003e command parser for output that does not contain centiseconds\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ex509-cert\u003c/code\u003e parser to handle IDNA2008 encoded email addresses with a warning\u003c/li\u003e\n\u003cli\u003eFix typing for upcoming python v3.14\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/kellyjonbrazil/jc/commit/8290734a87a30e5f0af7e1fba5ecbda2e1c145a8\"\u003e\u003ccode\u003e8290734\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/712\"\u003e#712\u003c/a\u003e from kellyjonbrazil/dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/9d11e1fe5bbdfb9f68b001940a7ae235b68db637\"\u003e\u003ccode\u003e9d11e1f\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/3a2946b6584f2128917ffe908f749498b8c5ea5c\"\u003e\u003ccode\u003e3a2946b\u003c/code\u003e\u003c/a\u003e add streaming csv-ih, tsv, and tsv-ih parsers with doc fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/22ff0e33c3957c929d45864cc9790b8f7b6fe9c8\"\u003e\u003ccode\u003e22ff0e3\u003c/code\u003e\u003c/a\u003e fix for python 3.15 behavior changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/fab550e3b8fef49abe297c5ac4f0b2f9b330d3a9\"\u003e\u003ccode\u003efab550e\u003c/code\u003e\u003c/a\u003e docs: fix typos (\u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/711\"\u003e#711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/6e79f08c9083836467711e6965f5ca18b1505674\"\u003e\u003ccode\u003e6e79f08\u003c/code\u003e\u003c/a\u003e Add TSV alias and CSV/TSV \u0026quot;No Header\u0026quot; alias (\u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/709\"\u003e#709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/900aed5d880f2c1150739976bfbfb1f87e64cbc9\"\u003e\u003ccode\u003e900aed5\u003c/code\u003e\u003c/a\u003e fix tests and update docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/676695eacf75aa01920b89bb1809ee96e47d20bb\"\u003e\u003ccode\u003e676695e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/701\"\u003e#701\u003c/a\u003e from jeffdyke/feature/certs-with-cert-name\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/30c75073044dd364174b080709e9fb6c870ce82e\"\u003e\u003ccode\u003e30c7507\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/7d801f30bb9b35b60938c193d76227f5a3473b50\"\u003e\u003ccode\u003e7d801f3\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kellyjonbrazil/jc/compare/v1.25.6...v1.25.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-git-revision-date-localized-plugin` from 1.5.3 to 1.5.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/releases\"\u003emkdocs-git-revision-date-localized-plugin's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.4\u003c/h2\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eRaises the \u003ccode\u003egitpython\u003c/code\u003e floor from \u003ccode\u003e\u0026gt;=3.1.44\u003c/code\u003e to \u003ccode\u003e\u0026gt;=3.1.59\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eEarlier dependabot bumps only touched this repo's \u003ccode\u003euv.lock\u003c/code\u003e, which pins the CI\nenvironment and nothing else. Downstream users installing from PyPI resolved\nagainst \u003ccode\u003epyproject.toml\u003c/code\u003e, so they could still land on a GitPython carrying the\n2026 option-injection advisories — GHSA-wvpp-8hx9-p66j and GHSA-jm78-9fvv-mhgr\namong them, all patched by 3.1.58, with further option hardening in 3.1.59.\u003c/p\u003e\n\u003cp\u003eThis plugin never passes user input as git options, so it was not exploitable\nthrough those. The floor bump forces the upgrade in environments that already\nhold an older GitPython, and clears the warnings downstream scanners report.\u003c/p\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/nucleus-ffm\"\u003e\u003ccode\u003e@​nucleus-ffm\u003c/code\u003e\u003c/a\u003e for reporting it in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/222\"\u003e#222\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eMaintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden test git repos against flaky \u0026quot;Error building trees\u0026quot; failures by \u003ca href=\"https://github.com/timvink\"\u003e\u003ccode\u003e@​timvink\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/212\"\u003e#212\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: update GitHub Actions to Node 24 compatible versions by \u003ca href=\"https://github.com/timvink\"\u003e\u003ccode\u003e@​timvink\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/213\"\u003e#213\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edeps: bump idna and pymdown-extensions to patch security alerts by \u003ca href=\"https://github.com/timvink\"\u003e\u003ccode\u003e@​timvink\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/214\"\u003e#214\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump gitpython from 3.1.50 to 3.1.58 in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/217\"\u003e#217\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/219\"\u003e#219\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/220\"\u003e#220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pymdown-extensions from 10.21.3 to 11.0.1 in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/218\"\u003e#218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/221\"\u003e#221\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.3...v1.5.4\"\u003ehttps://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.3...v1.5.4\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/a2313a306eaf9b92f0f0a27bfbd2eb44a9f847e2\"\u003e\u003ccode\u003ea2313a3\u003c/code\u003e\u003c/a\u003e Bump version to 1.5.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/b1be777c7ae9d1a5055a5dc452a48883dcbc2a64\"\u003e\u003ccode\u003eb1be777\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions from 11.0 to 11.0.1 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/221\"\u003e#221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/fd6e3b09e0b956fb93de0661ac9f8d3fa1aa1e8b\"\u003e\u003ccode\u003efd6e3b0\u003c/code\u003e\u003c/a\u003e Bump gitpython from 3.1.57 to 3.1.58 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/220\"\u003e#220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/0c308d5d3b6a7eb26aaa56b9d9a969622a4d7108\"\u003e\u003ccode\u003e0c308d5\u003c/code\u003e\u003c/a\u003e Bump gitpython from 3.1.54 to 3.1.57 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/219\"\u003e#219\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/75279a9252eed9f1558c56205c769b6f3cac3564\"\u003e\u003ccode\u003e75279a9\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions from 10.21.3 to 11.0 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/218\"\u003e#218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/7756feed9b64716d4d8fe5e2472abe3d99b1cc27\"\u003e\u003ccode\u003e7756fee\u003c/code\u003e\u003c/a\u003e Bump gitpython from 3.1.50 to 3.1.54 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/217\"\u003e#217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/0c2e203a79b63e5e1980eb209459cddf5fa8ec4e\"\u003e\u003ccode\u003e0c2e203\u003c/code\u003e\u003c/a\u003e deps: bump idna and pymdown-extensions to patch security alerts (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/214\"\u003e#214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/aa44586a9077b7aad533ddfd9872c105ffd9a1a7\"\u003e\u003ccode\u003eaa44586\u003c/code\u003e\u003c/a\u003e ci: update GitHub Actions to Node 24 compatible versions (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/213\"\u003e#213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/58eb93017772c7eb73b3f5bc239f1d2f7380e3d2\"\u003e\u003ccode\u003e58eb930\u003c/code\u003e\u003c/a\u003e Harden test git repos against flaky 'Error building trees' failures (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/212\"\u003e#212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.3...v1.5.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-material` from 9.7.6 to 9.7.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/squidfunk/mkdocs-material/releases\"\u003emkdocs-material's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003emkdocs-material-9.7.7\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial for MkDocs is approaching end of life\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eMaterial for MkDocs is scheduled to reach end of life on November 5, 2026. Until then, maintenance is limited to critical bug fixes and security updates. After this date, the project will remain available on PyPI and GitHub, but no further maintenance is planned except in exceptional circumstances.\u003c/p\u003e\n\u003cp\u003eFor users looking for a long-term, actively developed successor, we're building \u003ca href=\"https://zensical.org\"\u003eZensical\u003c/a\u003e – a next-generation static site generator designed for technical documentation. If you're planning a new documentation project or evaluating your long-term options, we invite you to take a look.\u003c/p\u003e\n\u003cp\u003eOrganizations requiring support beyond this date are welcome to get in touch to discuss available options.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\"\u003eRead the full announcement on our blog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a DOM-based XSS vulnerability in search suggestions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/p\"\u003e\u003ccode\u003e@​p\u003c/code\u003e\u003c/a\u003e- for responsibly reporting this issue.\u003c/p\u003e\n\u003c/blockquote\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/squidfunk/mkdocs-material/blob/master/CHANGELOG\"\u003emkdocs-material's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003emkdocs-material-9.7.7 (2026-07-17)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed DOM-based XSS vulnerability in search suggestions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.6 (2026-03-19)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAutomatically disable MkDocs 2.0 warning for forks of MkDocs\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.5 (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eLimited version range of mkdocs to \u0026lt;2\u003c/li\u003e\n\u003cli\u003eUpdated MkDocs 2.0 incompatibility warning (clarify relation with MkDocs)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.4 (2026-03-03)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHardened social cards plugin by switching to sandboxed environment\u003c/li\u003e\n\u003cli\u003eUpdated MkDocs 2.0 incompatibility warning\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.3 (2026-02-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8567\"\u003e#8567\u003c/a\u003e: Print MkDocs 2.0 incompatibility warning to stderr\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.2 (2026-02-18)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eOpened up version ranges of optional dependencies for forward-compatibility\u003c/li\u003e\n\u003cli\u003eAdded warning to 'mkdocs build' about impending MkDocs 2.0 incompatibility\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.1 (2025-12-18)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated requests to 2.30+ to mitigate CVE in urllib\u003c/li\u003e\n\u003cli\u003eFixed privacy plugin not picking up protocol-relative URLs\u003c/li\u003e\n\u003cli\u003eFixed \u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8542\"\u003e#8542\u003c/a\u003e: false positives and negatives captured in privacy plugin\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.0 (2025-11-11)\u003c/p\u003e\n\u003cp\u003e⚠️ Material for MkDocs is now in maintenance mode\u003c/p\u003e\n\u003cp\u003eThis is the last release of Material for MkDocs that will receive new features.\nGoing forward, the Material for MkDocs team focuses on Zensical, a next-gen\nstatic site generator built from first principles. We will provide critical\nbug fixes and security updates for Material for MkDocs for 12 months at least.\u003c/p\u003e\n\u003cp\u003eRead the full announcement on our blog:\n\u003ca href=\"https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\"\u003ehttps://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis release includes all features that were previously exclusive to the\nInsiders edition. These features are now freely available to everyone.\u003c/p\u003e\n\u003cp\u003eNote on deprecated plugins: The projects and typeset plugins are included in\nthis release, but must be considered deprecated. Both plugins proved\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/squidfunk/mkdocs-material/commit/b3e6dd886a974aa8200759ecfd7db28c598a2894\"\u003e\u003ccode\u003eb3e6dd8\u003c/code\u003e\u003c/a\u003e Prepare 9.7.7 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/52fb6be8aafe326419f34dc94d3211e7bbfbfb25\"\u003e\u003ccode\u003e52fb6be\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/901e6335cc80b0f12e46a1e34bd85e983dd78a6e\"\u003e\u003ccode\u003e901e633\u003c/code\u003e\u003c/a\u003e Added \u003ccode\u003eSECURITY.md\u003c/code\u003e with EOL notice\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/5b36f2ac499a45905e246bc66bbee2858ef6556f\"\u003e\u003ccode\u003e5b36f2a\u003c/code\u003e\u003c/a\u003e Bump js-yaml from 4.1.1 to 4.2.0 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8598\"\u003e#8598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/2d11e7bc92c59b86d6ac0da2e38044fb4befa6e0\"\u003e\u003ccode\u003e2d11e7b\u003c/code\u003e\u003c/a\u003e Bump form-data from 3.0.4 to 3.0.5 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8597\"\u003e#8597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/ae05a534a8c8e1c58eb6aa55d460d309bcfce22b\"\u003e\u003ccode\u003eae05a53\u003c/code\u003e\u003c/a\u003e Bump esbuild from 0.27.2 to 0.28.1 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8596\"\u003e#8596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/434af93166e5b90b78bba1295ca5a140fc67d0bc\"\u003e\u003ccode\u003e434af93\u003c/code\u003e\u003c/a\u003e Bump shell-quote from 1.7.3 to 1.8.4 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8593\"\u003e#8593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/4447cdadcbe8bc82570e9f1ae2b970f461b03b68\"\u003e\u003ccode\u003e4447cda\u003c/code\u003e\u003c/a\u003e Documentation (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8590\"\u003e#8590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/8f8d551c9c5296dfc2a5ede35047bfb491d66bc9\"\u003e\u003ccode\u003e8f8d551\u003c/code\u003e\u003c/a\u003e Updated copyright year (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8588\"\u003e#8588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/08d8514d491782b4ac46673bcfdedb2f6fc85f3d\"\u003e\u003ccode\u003e08d8514\u003c/code\u003e\u003c/a\u003e Bump fast-uri from 3.0.3 to 3.1.2 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8587\"\u003e#8587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/squidfunk/mkdocs-material/compare/9.7.6...9.7.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.4 to 1.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\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/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\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/mkdocstrings/mkdocstrings/commit/9a11dcb8e9b39ff6e1a22abdd362350de4e68e9f\"\u003e\u003ccode\u003e9a11dcb\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e\u003ccode\u003e4732798\u003c/code\u003e\u003c/a\u003e fix: Stop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ecbaa9a05dde5bdc83accf8814fa1c9a1ffe1473\"\u003e\u003ccode\u003eecbaa9a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/64260f748f3db8b301a9d6fa05b2609ab6f6876c\"\u003e\u003ccode\u003e64260f7\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003e\u003ccode\u003eacc0da3\u003c/code\u003e\u003c/a\u003e fix: Parse inventory project and version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ec45a9b7a1301a4c70e02e6c92e1b9caff6df61f\"\u003e\u003ccode\u003eec45a9b\u003c/code\u003e\u003c/a\u003e ci: Fix warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ce2199c5195535f8c3b4907dd3ac7de2181925cc\"\u003e\u003ccode\u003ece2199c\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README (\u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/823\"\u003e#823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asgiref` from 3.11.1 to 3.12.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/asgiref/blob/main/CHANGELOG.txt\"\u003easgiref's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.1 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRestored the previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape, which was\nrelied on by some APM services. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/572\"\u003e#572\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNote, this change was available whilst maintaining the underlying fix (from\n\u003ca href=\"https://redirect.github.com/django/asgiref/issues/564\"\u003e#564\u003c/a\u003e). It does not constitute an API stability promise. Ideally APMs are\n\u003cem\u003enot\u003c/em\u003e monkey patching internal APIs, and future changes will be made here if\nneeded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12.0 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAsyncToSync\u003c/code\u003e no longer captures the running event loop on\ninstantiation. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis resolves a series of deadlocks that users experienced after asgiref 3.9.0,\nparticularly with pytest-asyncio. pytest-asyncio stops the event loop between\ntests, and long-running unawaited futures could find themselves trying to\nschedule work onto a stopped loop, and so would never complete. Ideally, code\nshould be structured to await long-running futures before returning, but this\nchange should help users experiencing issues here.\u003c/p\u003e\n\u003cp\u003eThe loop is now resolved when the callable is invoked rather than when it is\ncreated. If \u003ccode\u003easync_to_sync\u003c/code\u003e is called from within \u003ccode\u003esync_to_async\u003c/code\u003e, the\nparent event loop is still used, as before.\u003c/p\u003e\n\u003cp\u003eThe possibility of deadlock therefore remains in some nested patterns. For\nexample, an async function may call a long-running \u003ccode\u003esync_to_async\u003c/code\u003e function\nthat itself uses \u003ccode\u003easync_to_sync\u003c/code\u003e; if the outer function returns before the\nsync future completes, the parent event loop may already be stopped, and the\nnested calls cannot be driven to completion.\u003c/p\u003e\n\u003cp\u003eThis is not a bug in asgiref — the same patterns deadlock in plain asyncio. As\nabove, restructure your code to await the \u003ccode\u003esync_to_async\u003c/code\u003e future before\nexiting the driving coroutine.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an event loop deadlock when exiting \u003ccode\u003eThreadSensitiveContext\u003c/code\u003e\nwhile its executor thread was still blocked waiting on the event loop.\n(\u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for EOL Python 3.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eStatelessServer.run()\u003c/code\u003e failing on Python 3.14, where\n\u003ccode\u003easyncio.get_event_loop()\u003c/code\u003e no longer creates an event loop if none\nexists. It now uses \u003ccode\u003easyncio.run()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/559\"\u003e#559\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eLocal\u003c/code\u003e leaking data between unrelated sync threads when\n\u003ccode\u003esys.flags.thread_inherit_context\u003c/code\u003e is enabled (Python 3.14+), so a newly\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/ef9d4b8b371cf8a7bb63dea3d0fdc60923e9e081\"\u003e\u003ccode\u003eef9d4b8\u003c/code\u003e\u003c/a\u003e Releasing 3.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/34fba6328f67a753d814c280811fd34094bd1f6c\"\u003e\u003ccode\u003e34fba63\u003c/code\u003e\u003c/a\u003e Restore previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a43900c131874be571c6afdca642d4054eed0acf\"\u003e\u003ccode\u003ea43900c\u003c/code\u003e\u003c/a\u003e Separate mypy from tests extra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/1b7c338591054c04ff6c140d899ced28b803b4e0\"\u003e\u003ccode\u003e1b7c338\u003c/code\u003e\u003c/a\u003e Releasing 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/157d9d4168434d73b1bb5a619f947b74ccbf1fc8\"\u003e\u003ccode\u003e157d9d4\u003c/code\u003e\u003c/a\u003e Renovate precommit (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/deda0d4fd8d3997dddd9646dd9ef7e0b6d3e59a5\"\u003e\u003ccode\u003ededa0d4\u003c/code\u003e\u003c/a\u003e Test free-threading builds and fix Local data leak for thread_inherit_context...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a54250a24ad770616d3afcc37af3186558562041\"\u003e\u003ccode\u003ea54250a\u003c/code\u003e\u003c/a\u003e Don’t capture the event loop in \u003ccode\u003eAsyncToSync.__init__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/836356a2802247a0963177197b50cbd7476d7950\"\u003e\u003ccode\u003e836356a\u003c/code\u003e\u003c/a\u003e Use asyncio.run in StatelessServer.run (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/e04afd54ba29bb277ba6177dc898c73c129446f3\"\u003e\u003ccode\u003ee04afd5\u003c/code\u003e\u003c/a\u003e Dropped support for Python 3.9. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/543\"\u003e#543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/95d2430a346be7f40652d2eabff84fe54fbc725d\"\u003e\u003ccode\u003e95d2430\u003c/code\u003e\u003c/a\u003e Fixed \u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e: ThreadSensitiveContext.\u003cstrong\u003eaexit\u003c/strong\u003e blocking the event loop. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/563\"\u003e#563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/asgiref/compare/3.11.1...3.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.5.20 to 2026.7.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f4bc676bc101fe2235846e37044e8c693d6cbaf4\"\u003e\u003ccode\u003ef4bc676\u003c/code\u003e\u003c/a\u003e 2026.07.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/428\"\u003e#428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/4c91f9c5f9b4676d40d2930025ba04d80dd536f6\"\u003e\u003ccode\u003e4c91f9c\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.3.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/01a66c5cf32eadb8f03a0504c24cb44f6d581248\"\u003e\u003ccode\u003e01a66c5\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/eb355f41cb71f71012ecf1a4d27a57d0ee2b1337\"\u003e\u003ccode\u003eeb355f4\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/474e6fc996d55b91632248da0bade702504e62dc\"\u003e\u003ccode\u003e474e6fc\u003c/code\u003e\u003c/a\u003e Include tests in the source distribution (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/424\"\u003e#424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a31ef39bb5906af7dc9729890f7e4e04e75afdae\"\u003e\u003ccode\u003ea31ef39\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/98eb2c76a9c7a8519912023dca00f762bbcd59af\"\u003e\u003ccode\u003e98eb2c7\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.3 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.05.20...2026.07.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMinimize internal Python API usage for interpreter and thread state sampling where possible. Avoids breaking ABI change in Python \u0026gt;= 3.15.0b4 (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/pull/269\"\u003epython-cffi/cffi#269\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\"\u003ehttps://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/fd33e7700f0ebafe6f30bd5053f13327221b77a2\"\u003e\u003ccode\u003efd33e77\u003c/code\u003e\u003c/a\u003e New release 2.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/56a7876b8cd3b2d8148233a90e0121d74cd83852\"\u003e\u003ccode\u003e56a7876\u003c/code\u003e\u003c/a\u003e Use PyGILState_Ensure to avoid accessing CPython internals (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/269\"\u003e#269\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.5.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/e239bdc5cc1eb1f0db08d4046ad531f805dbea71\"\u003e\u003ccode\u003ee239bdc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/795\"\u003e#795\u003c/a\u003e from jawah/release-3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/648ad776db64a00aa7efd70a94656ac43784abb3\"\u003e\u003ccode\u003e648ad77\u003c/code\u003e\u003c/a\u003e docs: update faq\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fab27492c39baa61aca12826022e266781108570\"\u003e\u003ccode\u003efab2749\u003c/code\u003e\u003c/a\u003e docs: write changelog for 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/7d32774e75d16cccd3d22c758a77fca135952787\"\u003e\u003ccode\u003e7d32774\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/9a69f609f254ba4bfe9d0cbf375728e43360cdf2\"\u003e\u003ccode\u003e9a69f60\u003c/code\u003e\u003c/a\u003e docs: update data/info\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5dcc6dd81a8a0a4bd525f8d6f508da8285caf402\"\u003e\u003ccode\u003e5dcc6dd\u003c/code\u003e\u003c/a\u003e perf: charinfo cache access optimization in cython\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/ea3b4479270762be1228562c590e5a212727f208\"\u003e\u003ccode\u003eea3b447\u003c/code\u003e\u003c/a\u003e fix: do not validate-decode large payload when md says it's noise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a05917f87b5f71d6022d8abe2b0af239f65c1111\"\u003e\u003ccode\u003ea05917f\u003c/code\u003e\u003c/a\u003e chore: allow setuptools 84 builds (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/3325d87c3c73fa1a8746947151faaf9a41177543\"\u003e\u003ccode\u003e3325d87\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/792\"\u003e#792\u003c/a\u003e from jawah/update-cibuildwheel-action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/77203b104216a6d578a682b5ac0514750aa988f7\"\u003e\u003ccode\u003e77203b1\u003c/code\u003e\u003c/a\u003e chore: reformat noxfile.py\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.1 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.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/click/8.4.2/\"\u003ehttps://pypi.org/project/click/8.4.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/34\"\u003ehttps://github.com/pallets/click/milestone/34\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by \u003ca href=\"https://redirect.github.com/pallets/click/issues/3126\"\u003e#3126\u003c/a\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3502\"\u003e#3502\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3043\"\u003e#3043\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3504\"\u003e#3504\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3508\"\u003e#3508\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3509\"\u003e#3509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3059\"\u003e#3059\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3242\"\u003e#3242\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2542\"\u003e#2542\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3534\"\u003e#3534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from \u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3533\"\u003e#3533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2331\"\u003e#2331\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1884\"\u003e#1884\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3125\"\u003e#3125\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\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/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-06-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by {pr}\u003ccode\u003e3126\u003c/code\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. {issue}\u003ccode\u003e3502\u003c/code\u003e\n{issue}\u003ccode\u003e3043\u003c/code\u003e {pr}\u003ccode\u003e3504\u003c/code\u003e {pr}\u003ccode\u003e3508\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. {pr}\u003ccode\u003e3509\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n{issue}\u003ccode\u003e3059\u003c/code\u003e {pr}\u003ccode\u003e3507\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. {issue}\u003ccode\u003e3242\u003c/code\u003e {issue}\u003ccode\u003e2542\u003c/code\u003e {pr}\u003ccode\u003e3534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from {pr}\u003ccode\u003e3482\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e\n{pr}\u003ccode\u003e3533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. {pr}\u003ccode\u003e3578\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. {issue}\u003ccode\u003e2331\u003c/code\u003e {issue}\u003ccode\u003e1884\u003c/code\u003e {issue}\u003ccode\u003e3125\u003c/code\u003e {pr}\u003ccode\u003e3582\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/click/commit/b2e30a175449cfda909ee4fbf4a29a6a071cad53\"\u003e\u003ccode\u003eb2e30a1\u003c/code\u003e\u003c/a\u003e Release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/7a16b20e8a8a9bb57c7b4f6f15f60f6597478a49\"\u003e\u003ccode\u003e7a16b20\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when module differs from distribution name (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bec59289d8cf9b9b4010642b2fee483e5f8eeefc\"\u003e\u003ccode\u003ebec5928\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when top-level module differs from distribution...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/916883afad450c0c9bbc4212817900949131adbd\"\u003e\u003ccode\u003e916883a\u003c/code\u003e\u003c/a\u003e Fix tests to not rely on \u003ccode\u003e-Wdefault\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3591\"\u003e#3591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/09195f6a92972c4e1bbb5493686456e6ba624520\"\u003e\u003ccode\u003e09195f6\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1557e265222c431b1e4d6c4dd6754006ed10dc02\"\u003e\u003ccode\u003e1557e26\u003c/code\u003e\u003c/a\u003e Check for warning exception with idiomatic context manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d9ff13369ac78d9acff693faa79f26badd566ab3\"\u003e\u003ccode\u003ed9ff133\u003c/code\u003e\u003c/a\u003e Static typing improvements in \u003ccode\u003eclick.shell_completion\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3460\"\u003e#3460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/762c97eef7c1b3779678992f26a553a2a8c80793\"\u003e\u003ccode\u003e762c97e\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8929d392781c8113bc569f388c15c47b94f86581\"\u003e\u003ccode\u003e8929d39\u003c/code\u003e\u003c/a\u003e Convert changes to markdown. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3559\"\u003e#3559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/237be507dbe3e653f6b41b3ea53266805534e8cd\"\u003e\u003ccode\u003e237be50\u003c/code\u003e\u003c/a\u003e Move changes headings down a level.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.4.1...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.14.1 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.0 — 2026-07-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSince 7.14.0, reporting commands implicitly combine parallel data files. Now those commands have a new option \u003ccode\u003e--keep-combined\u003c/code\u003e to retain the data files after combining them instead of the default, which is to delete them. Finishes \u003ca href=\"https://redirect.g...\n\n_Description has been truncated_","html_url":"https://github.com/RapariyaDeenu/InvenTree/pull/31","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/RapariyaDeenu%2FInvenTree/issues/31","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/31/packages"},{"uuid":"5282451268","node_id":"PR_kwDOSHaDgc8AAAABBY7_-Q","number":34,"state":"closed","title":"Bump the dependencies group across 2 directories with 108 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-09-04T21:32:12.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-28T21:33:44.000Z","updated_at":"2026-09-04T21:32:14.000Z","time_to_close":604708,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"dependencies","update_count":108,"packages":[{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"build","old_version":"1.4.2","new_version":"1.5.0","repository_url":"https://github.com/pypa/build"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.1","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.5.1","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.3.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"coverage","old_version":"7.13.5","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"distlib","old_version":"0.4.0","new_version":"0.4.3","repository_url":"https://github.com/pypa/distlib"},{"name":"django","old_version":"5.2.13","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-silk","old_version":"5.5.0","new_version":"5.5.2","repository_url":"https://github.com/jazzband/django-silk"},{"name":"django-stubs","old_version":"6.0.2","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-stubs-ext","old_version":"6.0.2","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-test-migrations","old_version":"1.5.0","new_version":"1.6.0","repository_url":"https://github.com/wemake-services/django-test-migrations"},{"name":"django-types","old_version":"0.23.0","new_version":"0.24.0","repository_url":"https://github.com/sbdchd/django-types"},{"name":"filelock","old_version":"3.25.2","new_version":"3.32.3","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"identify","old_version":"2.6.18","new_version":"2.6.19","repository_url":"https://github.com/pre-commit/identify"},{"name":"idna","old_version":"3.11","new_version":"3.19","repository_url":"https://github.com/kjd/idna"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"packaging","old_version":"26.0","new_version":"26.3","repository_url":"https://github.com/pypa/packaging"},{"name":"pip","old_version":"26.0.1","new_version":"26.2.1","repository_url":"https://github.com/pypa/pip"},{"name":"pip-tools","old_version":"7.5.3","new_version":"7.6.1","repository_url":"https://github.com/jazzband/pip-tools"},{"name":"platformdirs","old_version":"4.9.4","new_version":"4.11.3","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"pre-commit","old_version":"4.5.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pygments","old_version":"2.20.0","new_version":"2.21.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-codspeed","old_version":"4.3.0","new_version":"5.0.3","repository_url":"https://github.com/CodSpeedHQ/pytest-codspeed"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"python-discovery","old_version":"1.2.1","new_version":"1.5.2","repository_url":"https://github.com/tox-dev/python-discovery"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"rich","old_version":"14.3.3","new_version":"15.0.0","repository_url":"https://github.com/Textualize/rich"},{"name":"setuptools","old_version":"82.0.1","new_version":"84.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"sqlparse","old_version":"0.5.5","new_version":"0.6.0","repository_url":"https://github.com/andialbrecht/sqlparse"},{"name":"ty","old_version":"0.0.1a21","new_version":"0.0.73","repository_url":"https://github.com/astral-sh/ty"},{"name":"types-psycopg2","old_version":"2.9.21.20260223","new_version":"2.9.21.20260724","repository_url":"https://github.com/python/typeshed"},{"name":"types-pyyaml","old_version":"6.0.12.20250915","new_version":"6.0.12.20260815","repository_url":"https://github.com/python/typeshed"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"virtualenv","old_version":"21.2.0","new_version":"21.7.4","repository_url":"https://github.com/pypa/virtualenv"},{"name":"wheel","old_version":"0.46.3","new_version":"0.48.0","repository_url":"https://github.com/pypa/wheel"},{"name":"bleach","old_version":"4.1.0","new_version":"6.4.0","repository_url":"https://github.com/mozilla/bleach"},{"name":"blessed","old_version":"1.38.0","new_version":"1.48.0","repository_url":"https://github.com/jquast/blessed"},{"name":"boto3","old_version":"1.42.82","new_version":"1.43.78","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.42.82","new_version":"1.43.78","repository_url":"https://github.com/boto/botocore"},{"name":"django-allauth","old_version":"65.14.3","new_version":"65.19.1","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-anymail","old_version":"14.0","new_version":"15.1","repository_url":"https://github.com/anymail/django-anymail"},{"name":"django-dbbackup","old_version":"5.2.0","new_version":"5.3.0","repository_url":"https://github.com/Archmonger/django-dbbackup"},{"name":"django-filter","old_version":"25.2","new_version":"26.1","repository_url":"https://github.com/carltongibson/django-filter"},{"name":"django-js-asset","old_version":"3.1.2","new_version":"4.0.2","repository_url":"https://github.com/feincms/django-js-asset"},{"name":"django-maintenance-mode","old_version":"0.22.0","new_version":"0.23.0","repository_url":"https://github.com/fabiocaccamo/django-maintenance-mode"},{"name":"django-markdownify","old_version":"0.9.1","new_version":"0.9.7","repository_url":"https://github.com/erwinmatijsen/django-markdownify"},{"name":"django-money","old_version":"3.6.0","new_version":"3.6.1","repository_url":"https://github.com/django-money/django-money"},{"name":"django-oauth-toolkit","old_version":"3.2.0","new_version":"3.4.1","repository_url":"https://github.com/django-oauth/django-oauth-toolkit"},{"name":"django-otp","old_version":"1.3.0","new_version":"1.7.0","repository_url":"https://github.com/django-otp/django-otp"},{"name":"django-q2","old_version":"1.9.0","new_version":"1.11.0","repository_url":"https://github.com/GDay/django-q2"},{"name":"django-redis","old_version":"6.0.0","new_version":"7.0.0","repository_url":"https://github.com/jazzband/django-redis"},{"name":"django-structlog","old_version":"10.0.0","new_version":"10.1.0","repository_url":"https://github.com/jrobichaud/django-structlog"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"docutils","old_version":"0.22.4","new_version":"0.23","repository_url":"https://github.com/rtfd/recommonmark"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"dulwich","old_version":"1.1.0","new_version":"1.2.12","repository_url":"https://github.com/dulwich/dulwich"},{"name":"feedparser","old_version":"6.0.12","new_version":"6.0.14","repository_url":"https://github.com/kurtmckee/feedparser"},{"name":"fido2","old_version":"2.1.1","new_version":"2.2.1","repository_url":"https://github.com/Yubico/python-fido2"},{"name":"fonttools","old_version":"4.62.1","new_version":"4.63.0","repository_url":"https://github.com/fonttools/fonttools"},{"name":"googleapis-common-protos","old_version":"1.74.0","new_version":"1.75.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.80.0","new_version":"1.83.0","repository_url":"https://github.com/grpc/grpc"},{"name":"gunicorn","old_version":"25.3.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"icalendar","old_version":"7.0.3","new_version":"7.3.0","repository_url":"https://github.com/collective/icalendar"},{"name":"importlib-metadata","old_version":"8.7.1","new_version":"9.0.0","repository_url":"https://github.com/python/importlib_metadata"},{"name":"invoke","old_version":"2.2.1","new_version":"3.0.3","repository_url":"https://github.com/pyinvoke/invoke"},{"name":"jwcrypto","old_version":"1.5.7","new_version":"1.5.8","repository_url":"https://github.com/latchset/jwcrypto"},{"name":"lxml","old_version":"6.0.2","new_version":"6.1.2","repository_url":"https://github.com/lxml/lxml"},{"name":"markdown","old_version":"3.10.2","new_version":"3.10.3","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"nh3","old_version":"0.3.4","new_version":"0.3.6","repository_url":"https://github.com/messense/nh3"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.40.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.40.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.40.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.61b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-dbapi","old_version":"0.61b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.40.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.61b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.61b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"paramiko","old_version":"4.0.0","new_version":"5.0.0","repository_url":"https://github.com/paramiko/paramiko"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"prettytable","old_version":"3.17.0","new_version":"3.18.0","repository_url":"https://github.com/prettytable/prettytable"},{"name":"protobuf","old_version":"6.33.6","new_version":"7.36.0","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"pypdf","old_version":"6.10.0","new_version":"6.16.1","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"pyphen","old_version":"0.17.2","new_version":"0.18.1","repository_url":"https://github.com/Kozea/Pyphen"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-fsutil","old_version":"0.16.0","new_version":"0.17.0","repository_url":"https://github.com/fabiocaccamo/python-fsutil"},{"name":"rapidfuzz","old_version":"3.14.3","new_version":"3.14.5","repository_url":"https://github.com/rapidfuzz/RapidFuzz"},{"name":"redis","old_version":"7.4.0","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"rpds-py","old_version":"0.30.0","new_version":"2026.6.3","repository_url":"https://github.com/crate-py/rpds"},{"name":"s3transfer","old_version":"0.16.0","new_version":"0.19.2","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.57.0","new_version":"2.68.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"structlog","old_version":"25.5.0","new_version":"26.1.0","repository_url":"https://github.com/hynek/structlog"},{"name":"tablib","old_version":"3.9.0","new_version":"3.10.0","repository_url":"https://github.com/jazzband/tablib"},{"name":"tzdata","old_version":"2026.1","new_version":"2026.3","repository_url":"https://github.com/python/tzdata"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"weasyprint","old_version":"68.1","new_version":"69.0","repository_url":"https://github.com/Kozea/WeasyPrint"},{"name":"webencodings","old_version":"0.5.1","new_version":"0.6.1","repository_url":"https://github.com/CourtBouillon/webencodings"},{"name":"wrapt","old_version":"1.17.3","new_version":"2.3.0","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"zipp","old_version":"3.23.0","new_version":"4.1.0","repository_url":"https://github.com/jaraco/zipp"},{"name":"zopfli","old_version":"0.4.1","new_version":"0.4.3","repository_url":"https://github.com/fonttools/py-zopfli"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dependencies group with 4 updates in the /docs directory: [mkdocs-git-revision-date-localized-plugin](https://github.com/timvink/mkdocs-git-revision-date-localized-plugin), [mkdocs-include-markdown-plugin](https://github.com/mondeja/mkdocs-include-markdown-plugin), [mkdocs-material](https://github.com/squidfunk/mkdocs-material) and [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings).\nBumps the dependencies group with 104 updates in the /src/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [build](https://github.com/pypa/build) | `1.4.2` | `1.5.0` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.7.22` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.1` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.5.1` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.4.2` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.5` | `7.15.4` |\n| [distlib](https://github.com/pypa/distlib) | `0.4.0` | `0.4.3` |\n| [django](https://github.com/django/django) | `5.2.13` | `6.1` |\n| [django-silk](https://github.com/jazzband/django-silk) | `5.5.0` | `5.5.2` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.2` | `6.1.0` |\n| [django-stubs-ext](https://github.com/typeddjango/django-stubs) | `6.0.2` | `6.1.0` |\n| [django-test-migrations](https://github.com/wemake-services/django-test-migrations) | `1.5.0` | `1.6.0` |\n| [django-types](https://github.com/sbdchd/django-types) | `0.23.0` | `0.24.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.25.2` | `3.32.3` |\n| [identify](https://github.com/pre-commit/identify) | `2.6.18` | `2.6.19` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.19` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.3` |\n| [pip](https://github.com/pypa/pip) | `26.0.1` | `26.2.1` |\n| [pip-tools](https://github.com/jazzband/pip-tools) | `7.5.3` | `7.6.1` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.4` | `4.11.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.5.1` | `4.6.2` |\n| [pygments](https://github.com/pygments/pygments) | `2.20.0` | `2.21.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [pytest-codspeed](https://github.com/CodSpeedHQ/pytest-codspeed) | `4.3.0` | `5.0.3` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [python-discovery](https://github.com/tox-dev/python-discovery) | `1.2.1` | `1.5.2` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [rich](https://github.com/Textualize/rich) | `14.3.3` | `15.0.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `84.0.0` |\n| [sqlparse](https://github.com/andialbrecht/sqlparse) | `0.5.5` | `0.6.0` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.1a21` | `0.0.73` |\n| [types-psycopg2](https://github.com/python/typeshed) | `2.9.21.20260223` | `2.9.21.20260724` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20250915` | `6.0.12.20260815` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.2.0` | `21.7.4` |\n| [wheel](https://github.com/pypa/wheel) | `0.46.3` | `0.48.0` |\n| [bleach](https://github.com/mozilla/bleach) | `4.1.0` | `6.4.0` |\n| [blessed](https://github.com/jquast/blessed) | `1.38.0` | `1.48.0` |\n| [boto3](https://github.com/boto/boto3) | `1.42.82` | `1.43.78` |\n| [botocore](https://github.com/boto/botocore) | `1.42.82` | `1.43.78` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.14.3` | `65.19.1` |\n| [django-anymail](https://github.com/anymail/django-anymail) | `14.0` | `15.1` |\n| [django-dbbackup](https://github.com/Archmonger/django-dbbackup) | `5.2.0` | `5.3.0` |\n| [django-filter](https://github.com/carltongibson/django-filter) | `25.2` | `26.1` |\n| [django-js-asset](https://github.com/feincms/django-js-asset) | `3.1.2` | `4.0.2` |\n| [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) | `0.22.0` | `0.23.0` |\n| [django-markdownify](https://github.com/erwinmatijsen/django-markdownify) | `0.9.1` | `0.9.7` |\n| [django-money](https://github.com/django-money/django-money) | `3.6.0` | `3.6.1` |\n| [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) | `3.2.0` | `3.4.1` |\n| [django-otp](https://github.com/django-otp/django-otp) | `1.3.0` | `1.7.0` |\n| [django-q2](https://github.com/GDay/django-q2) | `1.9.0` | `1.11.0` |\n| [django-redis](https://github.com/jazzband/django-redis) | `6.0.0` | `7.0.0` |\n| [django-structlog](https://github.com/jrobichaud/django-structlog) | `10.0.0` | `10.1.0` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [docutils](https://github.com/rtfd/recommonmark) | `0.22.4` | `0.23` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `1.1.0` | `1.2.12` |\n| [feedparser](https://github.com/kurtmckee/feedparser) | `6.0.12` | `6.0.14` |\n| [fido2](https://github.com/Yubico/python-fido2) | `2.1.1` | `2.2.1` |\n| [fonttools](https://github.com/fonttools/fonttools) | `4.62.1` | `4.63.0` |\n| [googleapis-common-protos](https://github.com/googleapis/google-cloud-python) | `1.74.0` | `1.75.1` |\n| [grpcio](https://github.com/grpc/grpc) | `1.80.0` | `1.83.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `25.3.0` | `26.1.0` |\n| [icalendar](https://github.com/collective/icalendar) | `7.0.3` | `7.3.0` |\n| [importlib-metadata](https://github.com/python/importlib_metadata) | `8.7.1` | `9.0.0` |\n| [invoke](https://github.com/pyinvoke/invoke) | `2.2.1` | `3.0.3` |\n| [jwcrypto](https://github.com/latchset/jwcrypto) | `1.5.7` | `1.5.8` |\n| [lxml](https://github.com/lxml/lxml) | `6.0.2` | `6.1.2` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.10.2` | `3.10.3` |\n| [nh3](https://github.com/messense/nh3) | `0.3.4` | `0.3.6` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.44.0` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.65b0` |\n| [opentelemetry-instrumentation-dbapi](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.65b0` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.44.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.61b0` | `0.65b0` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.65b0` |\n| [paramiko](https://github.com/paramiko/paramiko) | `4.0.0` | `5.0.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [prettytable](https://github.com/prettytable/prettytable) | `3.17.0` | `3.18.0` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.6` | `7.36.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.10.0` | `6.16.1` |\n| [pyphen](https://github.com/Kozea/Pyphen) | `0.17.2` | `0.18.1` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [python-fsutil](https://github.com/fabiocaccamo/python-fsutil) | `0.16.0` | `0.17.0` |\n| [rapidfuzz](https://github.com/rapidfuzz/RapidFuzz) | `3.14.3` | `3.14.5` |\n| [redis](https://github.com/redis/redis-py) | `7.4.0` | `8.1.0` |\n| [rpds-py](https://github.com/crate-py/rpds) | `0.30.0` | `2026.6.3` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.16.0` | `0.19.2` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.57.0` | `2.68.0` |\n| [structlog](https://github.com/hynek/structlog) | `25.5.0` | `26.1.0` |\n| [tablib](https://github.com/jazzband/tablib) | `3.9.0` | `3.10.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.1` | `2026.3` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.8.2` |\n| [weasyprint](https://github.com/Kozea/WeasyPrint) | `68.1` | `69.0` |\n| [webencodings](https://github.com/CourtBouillon/webencodings) | `0.5.1` | `0.6.1` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `1.17.3` | `2.3.0` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.0` | `4.1.0` |\n| [zopfli](https://github.com/fonttools/py-zopfli) | `0.4.1` | `0.4.3` |\n\n\nUpdates `mkdocs-git-revision-date-localized-plugin` from 1.5.1 to 1.5.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/releases\"\u003emkdocs-git-revision-date-localized-plugin's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.4\u003c/h2\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eRaises the \u003ccode\u003egitpython\u003c/code\u003e floor from \u003ccode\u003e\u0026gt;=3.1.44\u003c/code\u003e to \u003ccode\u003e\u0026gt;=3.1.59\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eEarlier dependabot bumps only touched this repo's \u003ccode\u003euv.lock\u003c/code\u003e, which pins the CI\nenvironment and nothing else. Downstream users installing from PyPI resolved\nagainst \u003ccode\u003epyproject.toml\u003c/code\u003e, so they could still land on a GitPython carrying the\n2026 option-injection advisories — GHSA-wvpp-8hx9-p66j and GHSA-jm78-9fvv-mhgr\namong them, all patched by 3.1.58, with further option hardening in 3.1.59.\u003c/p\u003e\n\u003cp\u003eThis plugin never passes user input as git options, so it was not exploitable\nthrough those. The floor bump forces the upgrade in environments that already\nhold an older GitPython, and clears the warnings downstream scanners report.\u003c/p\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/nucleus-ffm\"\u003e\u003ccode\u003e@​nucleus-ffm\u003c/code\u003e\u003c/a\u003e for reporting it in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/222\"\u003e#222\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eMaintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden test git repos against flaky \u0026quot;Error building trees\u0026quot; failures by \u003ca href=\"https://github.com/timvink\"\u003e\u003ccode\u003e@​timvink\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/212\"\u003e#212\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: update GitHub Actions to Node 24 compatible versions by \u003ca href=\"https://github.com/timvink\"\u003e\u003ccode\u003e@​timvink\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/213\"\u003e#213\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edeps: bump idna and pymdown-extensions to patch security alerts by \u003ca href=\"https://github.com/timvink\"\u003e\u003ccode\u003e@​timvink\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/214\"\u003e#214\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump gitpython from 3.1.50 to 3.1.58 in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/217\"\u003e#217\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/219\"\u003e#219\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/220\"\u003e#220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pymdown-extensions from 10.21.3 to 11.0.1 in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/218\"\u003e#218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/221\"\u003e#221\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.3...v1.5.4\"\u003ehttps://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.3...v1.5.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.5.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix paths in MANIFEST.in by \u003ca href=\"https://github.com/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/211\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#211\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/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/211\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#211\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\"\u003ehttps://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.5.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGuard against \u003ccode\u003epage is None\u003c/code\u003e in mkdocs theme override Jinja2 templates by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/202\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#202\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependency updates (security)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump requests from 2.32.5 to 2.33.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/203\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#203\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pytest from 8.4.2 to 9.0.3 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/204\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump gitpython from 3.1.45 to 3.1.50 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/205\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#205\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/207\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#207\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/208\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pygments from 2.19.2 to 2.20.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/206\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#206\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump urllib3 from 2.6.3 to 2.7.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/209\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#209\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.1...v1.5.2\"\u003ehttps://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.1...v1.5.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/a2313a306eaf9b92f0f0a27bfbd2eb44a9f847e2\"\u003e\u003ccode\u003ea2313a3\u003c/code\u003e\u003c/a\u003e Bump version to 1.5.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/b1be777c7ae9d1a5055a5dc452a48883dcbc2a64\"\u003e\u003ccode\u003eb1be777\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions from 11.0 to 11.0.1 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/221\"\u003e#221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/fd6e3b09e0b956fb93de0661ac9f8d3fa1aa1e8b\"\u003e\u003ccode\u003efd6e3b0\u003c/code\u003e\u003c/a\u003e Bump gitpython from 3.1.57 to 3.1.58 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/220\"\u003e#220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/0c308d5d3b6a7eb26aaa56b9d9a969622a4d7108\"\u003e\u003ccode\u003e0c308d5\u003c/code\u003e\u003c/a\u003e Bump gitpython from 3.1.54 to 3.1.57 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/219\"\u003e#219\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/75279a9252eed9f1558c56205c769b6f3cac3564\"\u003e\u003ccode\u003e75279a9\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions from 10.21.3 to 11.0 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/218\"\u003e#218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/7756feed9b64716d4d8fe5e2472abe3d99b1cc27\"\u003e\u003ccode\u003e7756fee\u003c/code\u003e\u003c/a\u003e Bump gitpython from 3.1.50 to 3.1.54 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/217\"\u003e#217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/0c2e203a79b63e5e1980eb209459cddf5fa8ec4e\"\u003e\u003ccode\u003e0c2e203\u003c/code\u003e\u003c/a\u003e deps: bump idna and pymdown-extensions to patch security alerts (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/214\"\u003e#214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/aa44586a9077b7aad533ddfd9872c105ffd9a1a7\"\u003e\u003ccode\u003eaa44586\u003c/code\u003e\u003c/a\u003e ci: update GitHub Actions to Node 24 compatible versions (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/213\"\u003e#213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/58eb93017772c7eb73b3f5bc239f1d2f7380e3d2\"\u003e\u003ccode\u003e58eb930\u003c/code\u003e\u003c/a\u003e Harden test git repos against flaky 'Error building trees' failures (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/212\"\u003e#212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/30e58767a16cd9ec1dd2669f0bdc1af8630af18c\"\u003e\u003ccode\u003e30e5876\u003c/code\u003e\u003c/a\u003e Bump version to 1.5.3\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.1...v1.5.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-include-markdown-plugin` from 7.2.2 to 7.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mondeja/mkdocs-include-markdown-plugin/releases\"\u003emkdocs-include-markdown-plugin's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev7.3.0\u003c/h2\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new setting \u003ccode\u003einclude_from_url\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/mondeja/mkdocs-include-markdown-plugin/commit/0604be2390c35b9da7d1a69be2f8925693460efd\"\u003e\u003ccode\u003e0604be2\u003c/code\u003e\u003c/a\u003e Add new setting \u003ccode\u003einclude_from_url\u003c/code\u003e(\u003ca href=\"https://redirect.github.com/mondeja/mkdocs-include-markdown-plugin/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mondeja/mkdocs-include-markdown-plugin/commit/f0809f9ac84db5dd29a5bc98e9029d69164237b8\"\u003e\u003ccode\u003ef0809f9\u003c/code\u003e\u003c/a\u003e Document order setting (\u003ca href=\"https://redirect.github.com/mondeja/mkdocs-include-markdown-plugin/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mondeja/mkdocs-include-markdown-plugin/compare/v7.2.2...v7.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-material` from 9.7.6 to 9.7.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/squidfunk/mkdocs-material/releases\"\u003emkdocs-material's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003emkdocs-material-9.7.7\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial for MkDocs is approaching end of life\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eMaterial for MkDocs is scheduled to reach end of life on November 5, 2026. Until then, maintenance is limited to critical bug fixes and security updates. After this date, the project will remain available on PyPI and GitHub, but no further maintenance is planned except in exceptional circumstances.\u003c/p\u003e\n\u003cp\u003eFor users looking for a long-term, actively developed successor, we're building \u003ca href=\"https://zensical.org\"\u003eZensical\u003c/a\u003e – a next-generation static site generator designed for technical documentation. If you're planning a new documentation project or evaluating your long-term options, we invite you to take a look.\u003c/p\u003e\n\u003cp\u003eOrganizations requiring support beyond this date are welcome to get in touch to discuss available options.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\"\u003eRead the full announcement on our blog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a DOM-based XSS vulnerability in search suggestions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/p\"\u003e\u003ccode\u003e@​p\u003c/code\u003e\u003c/a\u003e- for responsibly reporting this issue.\u003c/p\u003e\n\u003c/blockquote\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/squidfunk/mkdocs-material/blob/master/CHANGELOG\"\u003emkdocs-material's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003emkdocs-material-9.7.7 (2026-07-17)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed DOM-based XSS vulnerability in search suggestions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.6 (2026-03-19)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAutomatically disable MkDocs 2.0 warning for forks of MkDocs\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.5 (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eLimited version range of mkdocs to \u0026lt;2\u003c/li\u003e\n\u003cli\u003eUpdated MkDocs 2.0 incompatibility warning (clarify relation with MkDocs)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.4 (2026-03-03)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHardened social cards plugin by switching to sandboxed environment\u003c/li\u003e\n\u003cli\u003eUpdated MkDocs 2.0 incompatibility warning\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.3 (2026-02-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8567\"\u003e#8567\u003c/a\u003e: Print MkDocs 2.0 incompatibility warning to stderr\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.2 (2026-02-18)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eOpened up version ranges of optional dependencies for forward-compatibility\u003c/li\u003e\n\u003cli\u003eAdded warning to 'mkdocs build' about impending MkDocs 2.0 incompatibility\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.1 (2025-12-18)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated requests to 2.30+ to mitigate CVE in urllib\u003c/li\u003e\n\u003cli\u003eFixed privacy plugin not picking up protocol-relative URLs\u003c/li\u003e\n\u003cli\u003eFixed \u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8542\"\u003e#8542\u003c/a\u003e: false positives and negatives captured in privacy plugin\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.0 (2025-11-11)\u003c/p\u003e\n\u003cp\u003e⚠️ Material for MkDocs is now in maintenance mode\u003c/p\u003e\n\u003cp\u003eThis is the last release of Material for MkDocs that will receive new features.\nGoing forward, the Material for MkDocs team focuses on Zensical, a next-gen\nstatic site generator built from first principles. We will provide critical\nbug fixes and security updates for Material for MkDocs for 12 months at least.\u003c/p\u003e\n\u003cp\u003eRead the full announcement on our blog:\n\u003ca href=\"https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\"\u003ehttps://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis release includes all features that were previously exclusive to the\nInsiders edition. These features are now freely available to everyone.\u003c/p\u003e\n\u003cp\u003eNote on deprecated plugins: The projects and typeset plugins are included in\nthis release, but must be considered deprecated. Both plugins proved\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/squidfunk/mkdocs-material/commit/b3e6dd886a974aa8200759ecfd7db28c598a2894\"\u003e\u003ccode\u003eb3e6dd8\u003c/code\u003e\u003c/a\u003e Prepare 9.7.7 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/52fb6be8aafe326419f34dc94d3211e7bbfbfb25\"\u003e\u003ccode\u003e52fb6be\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/901e6335cc80b0f12e46a1e34bd85e983dd78a6e\"\u003e\u003ccode\u003e901e633\u003c/code\u003e\u003c/a\u003e Added \u003ccode\u003eSECURITY.md\u003c/code\u003e with EOL notice\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/5b36f2ac499a45905e246bc66bbee2858ef6556f\"\u003e\u003ccode\u003e5b36f2a\u003c/code\u003e\u003c/a\u003e Bump js-yaml from 4.1.1 to 4.2.0 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8598\"\u003e#8598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/2d11e7bc92c59b86d6ac0da2e38044fb4befa6e0\"\u003e\u003ccode\u003e2d11e7b\u003c/code\u003e\u003c/a\u003e Bump form-data from 3.0.4 to 3.0.5 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8597\"\u003e#8597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/ae05a534a8c8e1c58eb6aa55d460d309bcfce22b\"\u003e\u003ccode\u003eae05a53\u003c/code\u003e\u003c/a\u003e Bump esbuild from 0.27.2 to 0.28.1 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8596\"\u003e#8596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/434af93166e5b90b78bba1295ca5a140fc67d0bc\"\u003e\u003ccode\u003e434af93\u003c/code\u003e\u003c/a\u003e Bump shell-quote from 1.7.3 to 1.8.4 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8593\"\u003e#8593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/4447cdadcbe8bc82570e9f1ae2b970f461b03b68\"\u003e\u003ccode\u003e4447cda\u003c/code\u003e\u003c/a\u003e Documentation (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8590\"\u003e#8590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/8f8d551c9c5296dfc2a5ede35047bfb491d66bc9\"\u003e\u003ccode\u003e8f8d551\u003c/code\u003e\u003c/a\u003e Updated copyright year (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8588\"\u003e#8588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/08d8514d491782b4ac46673bcfdedb2f6fc85f3d\"\u003e\u003ccode\u003e08d8514\u003c/code\u003e\u003c/a\u003e Bump fast-uri from 3.0.3 to 3.1.2 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8587\"\u003e#8587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/squidfunk/mkdocs-material/compare/9.7.6...9.7.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.3 to 1.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.4\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.4\"\u003e1.0.4\u003c/a\u003e - 2026-04-15\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003eCompare with 1.0.3\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd timeout when downloading inventories (10 seconds) (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e3d1969a\u003c/a\u003e by Simon Lloyd). \u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/819\"\u003eIssue-819\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/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.4\"\u003e1.0.4\u003c/a\u003e - 2026-04-15\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003eCompare with 1.0.3\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd timeout when downloading inventories (10 seconds) (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e3d1969a\u003c/a\u003e by Simon Lloyd). \u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/819\"\u003eIssue-819\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/mkdocstrings/mkdocstrings/commit/9a11dcb8e9b39ff6e1a22abdd362350de4e68e9f\"\u003e\u003ccode\u003e9a11dcb\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e\u003ccode\u003e4732798\u003c/code\u003e\u003c/a\u003e fix: Stop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ecbaa9a05dde5bdc83accf8814fa1c9a1ffe1473\"\u003e\u003ccode\u003eecbaa9a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/64260f748f3db8b301a9d6fa05b2609ab6f6876c\"\u003e\u003ccode\u003e64260f7\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003e\u003ccode\u003eacc0da3\u003c/code\u003e\u003c/a\u003e fix: Parse inventory project and version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ec45a9b7a1301a4c70e02e6c92e1b9caff6df61f\"\u003e\u003ccode\u003eec45a9b\u003c/code\u003e\u003c/a\u003e ci: Fix warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ce2199c5195535f8c3b4907dd3ac7de2181925cc\"\u003e\u003ccode\u003ece2199c\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README (\u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/823\"\u003e#823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/a938528b51b42cde52465d06d8b1a52484837366\"\u003e\u003ccode\u003ea938528\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/1eaa2242ec33e4b6ce666f0bbc25391f2a72c1d2\"\u003e\u003ccode\u003e1eaa224\u003c/code\u003e\u003c/a\u003e ci: Lint and type-check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/80e090d0bfbfa5688639e78559a4bb7bd3f7a55b\"\u003e\u003ccode\u003e80e090d\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asgiref` from 3.11.1 to 3.12.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/asgiref/blob/main/CHANGELOG.txt\"\u003easgiref's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.1 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRestored the previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape, which was\nrelied on by some APM services. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/572\"\u003e#572\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNote, this change was available whilst maintaining the underlying fix (from\n\u003ca href=\"https://redirect.github.com/django/asgiref/issues/564\"\u003e#564\u003c/a\u003e). It does not constitute an API stability promise. Ideally APMs are\n\u003cem\u003enot\u003c/em\u003e monkey patching internal APIs, and future changes will be made here if\nneeded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12.0 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAsyncToSync\u003c/code\u003e no longer captures the running event loop on\ninstantiation. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis resolves a series of deadlocks that users experienced after asgiref 3.9.0,\nparticularly with pytest-asyncio. pytest-asyncio stops the event loop between\ntests, and long-running unawaited futures could find themselves trying to\nschedule work onto a stopped loop, and so would never complete. Ideally, code\nshould be structured to await long-running futures before returning, but this\nchange should help users experiencing issues here.\u003c/p\u003e\n\u003cp\u003eThe loop is now resolved when the callable is invoked rather than when it is\ncreated. If \u003ccode\u003easync_to_sync\u003c/code\u003e is called from within \u003ccode\u003esync_to_async\u003c/code\u003e, the\nparent event loop is still used, as before.\u003c/p\u003e\n\u003cp\u003eThe possibility of deadlock therefore remains in some nested patterns. For\nexample, an async function may call a long-running \u003ccode\u003esync_to_async\u003c/code\u003e function\nthat itself uses \u003ccode\u003easync_to_sync\u003c/code\u003e; if the outer function returns before the\nsync future completes, the parent event loop may already be stopped, and the\nnested calls cannot be driven to completion.\u003c/p\u003e\n\u003cp\u003eThis is not a bug in asgiref — the same patterns deadlock in plain asyncio. As\nabove, restructure your code to await the \u003ccode\u003esync_to_async\u003c/code\u003e future before\nexiting the driving coroutine.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an event loop deadlock when exiting \u003ccode\u003eThreadSensitiveContext\u003c/code\u003e\nwhile its executor thread was still blocked waiting on the event loop.\n(\u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for EOL Python 3.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eStatelessServer.run()\u003c/code\u003e failing on Python 3.14, where\n\u003ccode\u003easyncio.get_event_loop()\u003c/code\u003e no longer creates an event loop if none\nexists. It now uses \u003ccode\u003easyncio.run()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/559\"\u003e#559\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eLocal\u003c/code\u003e leaking data between unrelated sync threads when\n\u003ccode\u003esys.flags.thread_inherit_context\u003c/code\u003e is enabled (Python 3.14+), so a newly\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/ef9d4b8b371cf8a7bb63dea3d0fdc60923e9e081\"\u003e\u003ccode\u003eef9d4b8\u003c/code\u003e\u003c/a\u003e Releasing 3.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/34fba6328f67a753d814c280811fd34094bd1f6c\"\u003e\u003ccode\u003e34fba63\u003c/code\u003e\u003c/a\u003e Restore previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a43900c131874be571c6afdca642d4054eed0acf\"\u003e\u003ccode\u003ea43900c\u003c/code\u003e\u003c/a\u003e Separate mypy from tests extra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/1b7c338591054c04ff6c140d899ced28b803b4e0\"\u003e\u003ccode\u003e1b7c338\u003c/code\u003e\u003c/a\u003e Releasing 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/157d9d4168434d73b1bb5a619f947b74ccbf1fc8\"\u003e\u003ccode\u003e157d9d4\u003c/code\u003e\u003c/a\u003e Renovate precommit (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/deda0d4fd8d3997dddd9646dd9ef7e0b6d3e59a5\"\u003e\u003ccode\u003ededa0d4\u003c/code\u003e\u003c/a\u003e Test free-threading builds and fix Local data leak for thread_inherit_context...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a54250a24ad770616d3afcc37af3186558562041\"\u003e\u003ccode\u003ea54250a\u003c/code\u003e\u003c/a\u003e Don’t capture the event loop in \u003ccode\u003eAsyncToSync.__init__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/836356a2802247a0963177197b50cbd7476d7950\"\u003e\u003ccode\u003e836356a\u003c/code\u003e\u003c/a\u003e Use asyncio.run in StatelessServer.run (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/e04afd54ba29bb277ba6177dc898c73c129446f3\"\u003e\u003ccode\u003ee04afd5\u003c/code\u003e\u003c/a\u003e Dropped support for Python 3.9. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/543\"\u003e#543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/95d2430a346be7f40652d2eabff84fe54fbc725d\"\u003e\u003ccode\u003e95d2430\u003c/code\u003e\u003c/a\u003e Fixed \u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e: ThreadSensitiveContext.\u003cstrong\u003eaexit\u003c/strong\u003e blocking the event loop. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/563\"\u003e#563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/asgiref/compare/3.11.1...3.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `build` from 1.4.2 to 1.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/releases\"\u003ebuild's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.5.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eci: try to improve release docs by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1051\"\u003epypa/build#1051\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: drop 3.9, require 3.10+ by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1036\"\u003epypa/build#1036\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: tox toml by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1033\"\u003epypa/build#1033\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: api should not ignore installed, only CLI by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1056\"\u003epypa/build#1056\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/build/compare/1.4.4...1.5.0\"\u003ehttps://github.com/pypa/build/compare/1.4.4...1.5.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.4.4\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(release): generate consistent CHANGELOG heading levels by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1032\"\u003epypa/build#1032\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: move source links by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1034\"\u003epypa/build#1034\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erevert: drop PEP 660 change by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1039\"\u003epypa/build#1039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: ignore installed when running pip by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1040\"\u003epypa/build#1040\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: revert part of \u003ca href=\"https://redirect.github.com/pypa/build/issues/973\"\u003e#973\u003c/a\u003e by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1044\"\u003epypa/build#1044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: report coverage failure lines by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1046\"\u003epypa/build#1046\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: fix issue with uv run by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1048\"\u003epypa/build#1048\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: reorganize testing docs for copy/paste by \u003ca href=\"https://github.com/abitrolly\"\u003e\u003ccode\u003e@​abitrolly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1043\"\u003epypa/build#1043\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: keep environment from leaking in Python 3.15 by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1049\"\u003epypa/build#1049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix issue with changelog generation by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1050\"\u003epypa/build#1050\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/build/compare/1.4.3...1.4.4\"\u003ehttps://github.com/pypa/build/compare/1.4.3...1.4.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.4.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(api): resolve thread-safety races in build API by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1015\"\u003epypa/build#1015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(builder): validate backend-path entries exist on disk by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1016\"\u003epypa/build#1016\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: cover config settings build paths by \u003ca href=\"https://github.com/terminalchai\"\u003e\u003ccode\u003e@​terminalchai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/992\"\u003epypa/build#992\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd kind=(step, ) for root messages with * by \u003ca href=\"https://github.com/abitrolly\"\u003e\u003ccode\u003e@​abitrolly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/973\"\u003epypa/build#973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: correct changelog category ordering by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1017\"\u003epypa/build#1017\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(cli): show full dependency chain in missing deps error by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1019\"\u003epypa/build#1019\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: fully annotate by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1020\"\u003epypa/build#1020\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: lazy imports by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1021\"\u003epypa/build#1021\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: adding more ruff codes by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1022\"\u003epypa/build#1022\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: improve annotations by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1023\"\u003epypa/build#1023\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test(coverage): achieve 100% test coverage by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1018\"\u003epypa/build#1018\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add ruff PT by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1025\"\u003epypa/build#1025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add ruff PYI by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1026\"\u003epypa/build#1026\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add ruff SIM/RET by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1028\"\u003epypa/build#1028\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(env): strip PYTHONPATH from isolated builds by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1024\"\u003epypa/build#1024\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: use ruff ALL by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1029\"\u003epypa/build#1029\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/blob/main/CHANGELOG.rst\"\u003ebuild's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e####################\n1.6.0 (2026-08-27)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--report=PATH\u003c/code\u003e to write a machine-readable JSON report of built artifacts; \u003ccode\u003e--metadata\u003c/code\u003e now also accepts\n\u003ccode\u003e.whl\u003c/code\u003e files - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e198\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003esrcdir\u003c/code\u003e argument now accepts \u003ccode\u003e.tar.gz\u003c/code\u003e source distributions, extracting and building from them - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e311\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Unmet dependencies\u0026quot; error from \u003ccode\u003e--no-isolation\u003c/code\u003e builds now shows the wanted version, found version, and\ninterpreter - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e504\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e to extract the intermediate sdist into a persistent directory, enabling compiler cache\nreuse across rebuilds - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e614\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--env-dir\u003c/code\u003e to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds\n\u003cul\u003e\n\u003cli\u003eby :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e655\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePrint a summary of resolved dependency versions (\u003ccode\u003ename==version\u003c/code\u003e) after installing them in isolated builds - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e959\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOn build failure, print a tip pointing to \u003ccode\u003e--env-dir\u003c/code\u003e and \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e for debugging and link to the\n\u0026quot;Debug a failed build\u0026quot; how-to - reported by :user:\u003ccode\u003edimpase\u003c/code\u003e, implemented by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e966\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDrain verbose subprocess output inline instead of using a \u003ccode\u003eThreadPoolExecutor\u003c/code\u003e, which silently swallowed logging\nerrors - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1098\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eReject a file passed as \u003ccode\u003e--env-dir\u003c/code\u003e with a clear error instead of a raw \u003ccode\u003eFileExistsError\u003c/code\u003e - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e\n(:issue:\u003ccode\u003e1100\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eEmit CLI warnings to stderr instead of stdout, so they no longer corrupt \u003ccode\u003e--metadata\u003c/code\u003e JSON output on stdout - by\n:user:\u003ccode\u003eymyzk\u003c/code\u003e (:issue:\u003ccode\u003e1111\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix the Windows symlink support probe always returning \u003ccode\u003eFalse\u003c/code\u003e due to a stale object interpolated into the\ndestination path - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1118\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003emetadata_path\u003c/code\u003e's build-backend fallback returning a nonexistent dist-info path for wheels with a build tag - by\n:user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWrite pip/uv requirements and constraints files with \u003ccode\u003e\\n\u003c/code\u003e instead of \u003ccode\u003eos.linesep\u003c/code\u003e, avoiding doubled \u003ccode\u003e\\r\\r\\n\u003c/code\u003e\nline endings on Windows - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1120\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eBatch of small robustness fixes: correct macOS release parsing for the minimum pip version, avoid sharing the mutable\ndefault build-system table between builders, keep the original error when isolated-environment setup fails early, and\nraise \u003ccode\u003eBuildException\u003c/code\u003e for an invalid wheel - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1121\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDecide color support independently for stdout and stderr instead of only checking \u003ccode\u003estdout.isatty()\u003c/code\u003e, so redirecting\none stream no longer disables or leaks ANSI colors on the other - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1123\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePass \u003ccode\u003e--dependency-constraints-txt\u003c/code\u003e files through to the installer unmodified instead of re-parsing them into a\ndeduplicated set of lines, fixing a case where a hashed requirement (e.g. from \u003ccode\u003epip-compile --generate-hashes\u003c/code\u003e)\ncould have its \u003ccode\u003e--hash\u003c/code\u003e continuation line separated from its requirement line and silently dropped, depending on the\ninterpreter's hash seed - by :user:\u003ccode\u003emanfred-kaiser\u003c/code\u003e (:issue:\u003ccode\u003e1140\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/615d04cfc52ac3c1592a463f0afe484fee1cc368\"\u003e\u003ccode\u003e615d04c\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/776f702f84787525df62a5473dd13d4e2f45b977\"\u003e\u003ccode\u003e776f702\u003c/code\u003e\u003c/a\u003e fix: api should not ignore installed, only CLI (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1056\"\u003e#1056\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/42da4c4b483563819fabdb8ecf2f6df53ed82123\"\u003e\u003ccode\u003e42da4c4\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1055\"\u003e#1055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/b445cd2e736db5f80cde7d952d620a73cc26bf9d\"\u003e\u003ccode\u003eb445cd2\u003c/code\u003e\u003c/a\u003e chore: tox toml (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1033\"\u003e#1033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/c44c143876042ac6e1212a31684a3adca19beda4\"\u003e\u003ccode\u003ec44c143\u003c/code\u003e\u003c/a\u003e feat: drop 3.9, require 3.10+ (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/a9bb4560d213069b11c8068159f1de060abec5b7\"\u003e\u003ccode\u003ea9bb456\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 in the actions group...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/cb3351155ce99902580022acb81dc0adb8124d53\"\u003e\u003ccode\u003ecb33511\u003c/code\u003e\u003c/a\u003e ci: try to improve release docs (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1051\"\u003e#1051\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/70666a296c2e5bb7451f5a04eef259f6f943d0de\"\u003e\u003ccode\u003e70666a2\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.4.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/653d86586dea8b4e020086a276a15a27ac7bd25d\"\u003e\u003ccode\u003e653d865\u003c/code\u003e\u003c/a\u003e docs: fix issue with changelog generation (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1050\"\u003e#1050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/373b9ee171e2f16353365b1a9a02bc408b96ca73\"\u003e\u003ccode\u003e373b9ee\u003c/code\u003e\u003c/a\u003e tests: keep environment from leaking in Python 3.15 (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1049\"\u003e#1049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.4.2...1.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.7.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f4bc676bc101fe2235846e37044e8c693d6cbaf4\"\u003e\u003ccode\u003ef4bc676\u003c/code\u003e\u003c/a\u003e 2026.07.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/428\"\u003e#428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/4c91f9c5f9b4676d40d2930025ba04d80dd536f6\"\u003e\u003ccode\u003e4c91f9c\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.3.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/01a66c5cf32eadb8f03a0504c24cb44f6d581248\"\u003e\u003ccode\u003e01a66c5\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/eb355f41cb71f71012ecf1a4d27a57d0ee2b1337\"\u003e\u003ccode\u003eeb355f4\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/474e6fc996d55b91632248da0bade702504e62dc\"\u003e\u003ccode\u003e474e6fc\u003c/code\u003e\u003c/a\u003e Include tests in the source distribution (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/424\"\u003e#424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a31ef39bb5906af7dc9729890f7e4e04e75afdae\"\u003e\u003ccode\u003ea31ef39\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/98eb2c76a9c7a8519912023dca00f762bbcd59af\"\u003e\u003ccode\u003e98eb2c7\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.3 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.07.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMinimize internal Python API usage for interpreter and thread state sampling where possible. Avoids breaking ABI change in Python \u0026gt;= 3.15.0b4 (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/pull/269\"\u003epython-cffi/cffi#269\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\"\u003ehttps://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/fd33e7700f0ebafe6f30bd5053f13327221b77a2\"\u003e\u003ccode\u003efd33e77\u003c/code\u003e\u003c/a\u003e New release 2.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/56a7876b8cd3b2d8148233a90e0121d74cd83852\"\u003e\u003ccode\u003e56a7876\u003c/code\u003e\u003c/a\u003e Use PyGILState_Ensure to avoid accessing CPython internals (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/269\"\u003e#269\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.5.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/e239bdc5cc1eb1f0db08d4046ad531f805dbea71\"\u003e\u003ccode\u003ee239bdc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/795\"\u003e#795\u003c/a\u003e from jawah/release-3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/648ad776db64a00aa7efd70a94656ac43784abb3\"\u003e\u003ccode\u003e648ad77\u003c/code\u003e\u003c/a\u003e docs: update faq\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fab27492c39baa61aca12826022e266781108570\"\u003e\u003ccode\u003efab2749\u003c/code\u003e\u003c/a\u003e docs: write changelog for 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/7d32774e75d16cccd3d22c758a77fca135952787\"\u003e\u003ccode\u003e7d32774\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/9a69f609f254ba4bfe9d0cbf375728e43360cdf2\"\u003e\u003ccode\u003e9a69f60\u003c/code\u003e\u003c/a\u003e docs: update data/info\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5dcc6dd81a8a0a4bd525f8d6f508da8285caf402\"\u003e\u003ccode\u003e5dcc6dd\u003c/code\u003e\u003c/a\u003e perf: charinfo cache access optimization in cython\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/ea3b4479270762be1228562c590e5a212727f208\"\u003e\u003ccode\u003eea3b447\u003c/code\u003e\u003c/a\u003e fix: do not validate-decode large payload when md says it's noise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a05917f87b5f71d6022d8abe2b0af239f65c1111\"\u003e\u003ccode\u003ea05917f\u003c/code\u003e\u003c/a\u003e chore: allow setuptools 84 builds (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/3325d87c3c73fa1a8746947151faaf9a41177543\"\u003e\u003ccode\u003e3325d87\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/792\"\u003e#792\u003c/a\u003e from jawah/update-cibuildwheel-action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/77203b104216a6d578a682b5ac0514750aa988f7\"\u003e\u003ccode\u003e77203b1\u003c/code\u003e\u003c/a\u003e chore: reformat noxfile.py\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"ht...\n\n_Description has been truncated_","html_url":"https://github.com/anh1c/inventory-management/pull/34","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/anh1c%2Finventory-management/issues/34","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/34/packages"},{"uuid":"5274283250","node_id":"PR_kwDOTRd_vs8AAAABBScRFg","number":26,"state":"closed","title":"chore(deps): bump the dependencies group across 2 directories with 74 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-09-04T02:57:50.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-28T03:03:54.000Z","updated_at":"2026-09-04T02:57:51.000Z","time_to_close":604436,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"dependencies","update_count":74,"packages":[{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"certifi","old_version":"2026.6.17","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.1","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.5.1","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"coverage","old_version":"7.14.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django","old_version":"5.2.15","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-silk","old_version":"5.5.0","new_version":"5.5.2","repository_url":"https://github.com/jazzband/django-silk"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-stubs-ext","old_version":"6.0.6","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-test-migrations","old_version":"1.5.0","new_version":"1.6.0","repository_url":"https://github.com/wemake-services/django-test-migrations"},{"name":"idna","old_version":"3.18","new_version":"3.19","repository_url":"https://github.com/kjd/idna"},{"name":"packaging","old_version":"26.2","new_version":"26.3","repository_url":"https://github.com/pypa/packaging"},{"name":"pip","old_version":"26.1.2","new_version":"26.2.1","repository_url":"https://github.com/pypa/pip"},{"name":"pip-tools","old_version":"7.5.3","new_version":"7.6.1","repository_url":"https://github.com/jazzband/pip-tools"},{"name":"prek","old_version":"0.4.5","new_version":"0.4.14","repository_url":"https://github.com/j178/prek"},{"name":"pygments","old_version":"2.20.0","new_version":"2.21.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"setuptools","old_version":"82.0.1","new_version":"84.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"sqlparse","old_version":"0.5.5","new_version":"0.6.0","repository_url":"https://github.com/andialbrecht/sqlparse"},{"name":"ty","old_version":"0.0.54","new_version":"0.0.73","repository_url":"https://github.com/astral-sh/ty"},{"name":"types-psycopg2","old_version":"2.9.21.20260518","new_version":"2.9.21.20260724","repository_url":"https://github.com/python/typeshed"},{"name":"types-pyyaml","old_version":"6.0.12.20260518","new_version":"6.0.12.20260815","repository_url":"https://github.com/python/typeshed"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"wheel","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/pypa/wheel"},{"name":"blessed","old_version":"1.44.0","new_version":"1.48.0","repository_url":"https://github.com/jquast/blessed"},{"name":"boto3","old_version":"1.43.36","new_version":"1.43.76","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.36","new_version":"1.43.76","repository_url":"https://github.com/boto/botocore"},{"name":"django-allauth","old_version":"65.14.3","new_version":"65.19.1","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1","repository_url":"https://github.com/anymail/django-anymail"},{"name":"django-filter","old_version":"25.2","new_version":"26.1","repository_url":"https://github.com/carltongibson/django-filter"},{"name":"django-js-asset","old_version":"4.0.1","new_version":"4.0.2","repository_url":"https://github.com/feincms/django-js-asset"},{"name":"django-maintenance-mode","old_version":"0.22.0","new_version":"0.23.0","repository_url":"https://github.com/fabiocaccamo/django-maintenance-mode"},{"name":"django-oauth-toolkit","old_version":"3.3.0","new_version":"3.4.0","repository_url":"https://github.com/django-oauth/django-oauth-toolkit"},{"name":"django-otp","old_version":"1.3.0","new_version":"1.7.0","repository_url":"https://github.com/django-otp/django-otp"},{"name":"django-q2","old_version":"1.10.0","new_version":"1.11.0","repository_url":"https://github.com/GDay/django-q2"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"dulwich","old_version":"1.2.6","new_version":"1.2.12","repository_url":"https://github.com/dulwich/dulwich"},{"name":"feedparser","old_version":"6.0.12","new_version":"6.0.14","repository_url":"https://github.com/kurtmckee/feedparser"},{"name":"fido2","old_version":"2.2.0","new_version":"2.2.1","repository_url":"https://github.com/Yubico/python-fido2"},{"name":"googleapis-common-protos","old_version":"1.75.0","new_version":"1.75.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.81.1","new_version":"1.83.0","repository_url":"https://github.com/grpc/grpc"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"icalendar","old_version":"7.2.0","new_version":"7.3.0","repository_url":"https://github.com/collective/icalendar"},{"name":"jinxed","old_version":"2.0.4","new_version":"2.1.0","repository_url":"https://github.com/Rockhopper-Technologies/jinxed"},{"name":"lxml","old_version":"6.1.1","new_version":"6.1.2","repository_url":"https://github.com/lxml/lxml"},{"name":"markdown","old_version":"3.10.2","new_version":"3.10.3","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.43.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.43.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.43.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.64b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-dbapi","old_version":"0.64b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.43.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.64b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.64b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"platformdirs","old_version":"4.10.0","new_version":"4.11.3","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"protobuf","old_version":"7.35.1","new_version":"7.36.0","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pypdf","old_version":"6.14.2","new_version":"6.16.1","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"pyphen","old_version":"0.17.2","new_version":"0.18.1","repository_url":"https://github.com/Kozea/Pyphen"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-fsutil","old_version":"0.16.1","new_version":"0.17.0","repository_url":"https://github.com/fabiocaccamo/python-fsutil"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"rpds-py","old_version":"2026.5.1","new_version":"2026.6.3","repository_url":"https://github.com/crate-py/rpds"},{"name":"s3transfer","old_version":"0.19.0","new_version":"0.19.2","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.63.0","new_version":"2.68.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"tablib","old_version":"3.9.0","new_version":"3.10.0","repository_url":"https://github.com/jazzband/tablib"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.70.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"tzdata","old_version":"2026.2","new_version":"2026.3","repository_url":"https://github.com/python/tzdata"},{"name":"wcwidth","old_version":"0.8.1","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"webencodings","old_version":"0.5.1","new_version":"0.6.1","repository_url":"https://github.com/CourtBouillon/webencodings"},{"name":"wrapt","old_version":"2.2.2","new_version":"2.3.0","repository_url":"https://github.com/GrahamDumpleton/wrapt"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dependencies group with 2 updates in the /docs directory: [mkdocs-material](https://github.com/squidfunk/mkdocs-material) and [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings).\nBumps the dependencies group with 72 updates in the /src/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.6.17` | `2026.7.22` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.1` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.5.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.3` | `7.15.4` |\n| [django](https://github.com/django/django) | `5.2.15` | `6.1` |\n| [django-silk](https://github.com/jazzband/django-silk) | `5.5.0` | `5.5.2` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [django-stubs-ext](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [django-test-migrations](https://github.com/wemake-services/django-test-migrations) | `1.5.0` | `1.6.0` |\n| [idna](https://github.com/kjd/idna) | `3.18` | `3.19` |\n| [packaging](https://github.com/pypa/packaging) | `26.2` | `26.3` |\n| [pip](https://github.com/pypa/pip) | `26.1.2` | `26.2.1` |\n| [pip-tools](https://github.com/jazzband/pip-tools) | `7.5.3` | `7.6.1` |\n| [prek](https://github.com/j178/prek) | `0.4.5` | `0.4.14` |\n| [pygments](https://github.com/pygments/pygments) | `2.20.0` | `2.21.0` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `84.0.0` |\n| [sqlparse](https://github.com/andialbrecht/sqlparse) | `0.5.5` | `0.6.0` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.54` | `0.0.73` |\n| [types-psycopg2](https://github.com/python/typeshed) | `2.9.21.20260518` | `2.9.21.20260724` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20260518` | `6.0.12.20260815` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [wheel](https://github.com/pypa/wheel) | `0.47.0` | `0.48.0` |\n| [blessed](https://github.com/jquast/blessed) | `1.44.0` | `1.48.0` |\n| [boto3](https://github.com/boto/boto3) | `1.43.36` | `1.43.76` |\n| [botocore](https://github.com/boto/botocore) | `1.43.36` | `1.43.76` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.14.3` | `65.19.1` |\n| [django-anymail](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-filter](https://github.com/carltongibson/django-filter) | `25.2` | `26.1` |\n| [django-js-asset](https://github.com/feincms/django-js-asset) | `4.0.1` | `4.0.2` |\n| [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) | `0.22.0` | `0.23.0` |\n| [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) | `3.3.0` | `3.4.0` |\n| [django-otp](https://github.com/django-otp/django-otp) | `1.3.0` | `1.7.0` |\n| [django-q2](https://github.com/GDay/django-q2) | `1.10.0` | `1.11.0` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `1.2.6` | `1.2.12` |\n| [feedparser](https://github.com/kurtmckee/feedparser) | `6.0.12` | `6.0.14` |\n| [fido2](https://github.com/Yubico/python-fido2) | `2.2.0` | `2.2.1` |\n| [googleapis-common-protos](https://github.com/googleapis/google-cloud-python) | `1.75.0` | `1.75.1` |\n| [grpcio](https://github.com/grpc/grpc) | `1.81.1` | `1.83.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [icalendar](https://github.com/collective/icalendar) | `7.2.0` | `7.3.0` |\n| [jinxed](https://github.com/Rockhopper-Technologies/jinxed) | `2.0.4` | `2.1.0` |\n| [lxml](https://github.com/lxml/lxml) | `6.1.1` | `6.1.2` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.10.2` | `3.10.3` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.43.0` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.43.0` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.43.0` | `1.44.0` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.64b0` | `0.65b0` |\n| [opentelemetry-instrumentation-dbapi](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.64b0` | `0.65b0` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.43.0` | `1.44.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.64b0` | `0.65b0` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.64b0` | `0.65b0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.10.0` | `4.11.3` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `7.35.1` | `7.36.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.14.2` | `6.16.1` |\n| [pyphen](https://github.com/Kozea/Pyphen) | `0.17.2` | `0.18.1` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [python-fsutil](https://github.com/fabiocaccamo/python-fsutil) | `0.16.1` | `0.17.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [rpds-py](https://github.com/crate-py/rpds) | `2026.5.1` | `2026.6.3` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.19.0` | `0.19.2` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.63.0` | `2.68.0` |\n| [tablib](https://github.com/jazzband/tablib) | `3.9.0` | `3.10.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.70.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.2` | `2026.3` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.8.1` | `0.8.2` |\n| [webencodings](https://github.com/CourtBouillon/webencodings) | `0.5.1` | `0.6.1` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `2.2.2` | `2.3.0` |\n\n\nUpdates `mkdocs-material` from 9.7.6 to 9.7.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/squidfunk/mkdocs-material/releases\"\u003emkdocs-material's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003emkdocs-material-9.7.7\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial for MkDocs is approaching end of life\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eMaterial for MkDocs is scheduled to reach end of life on November 5, 2026. Until then, maintenance is limited to critical bug fixes and security updates. After this date, the project will remain available on PyPI and GitHub, but no further maintenance is planned except in exceptional circumstances.\u003c/p\u003e\n\u003cp\u003eFor users looking for a long-term, actively developed successor, we're building \u003ca href=\"https://zensical.org\"\u003eZensical\u003c/a\u003e – a next-generation static site generator designed for technical documentation. If you're planning a new documentation project or evaluating your long-term options, we invite you to take a look.\u003c/p\u003e\n\u003cp\u003eOrganizations requiring support beyond this date are welcome to get in touch to discuss available options.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\"\u003eRead the full announcement on our blog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a DOM-based XSS vulnerability in search suggestions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/p\"\u003e\u003ccode\u003e@​p\u003c/code\u003e\u003c/a\u003e- for responsibly reporting this issue.\u003c/p\u003e\n\u003c/blockquote\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/squidfunk/mkdocs-material/blob/master/CHANGELOG\"\u003emkdocs-material's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003emkdocs-material-9.7.7 (2026-07-17)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed DOM-based XSS vulnerability in search suggestions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.6 (2026-03-19)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAutomatically disable MkDocs 2.0 warning for forks of MkDocs\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.5 (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eLimited version range of mkdocs to \u0026lt;2\u003c/li\u003e\n\u003cli\u003eUpdated MkDocs 2.0 incompatibility warning (clarify relation with MkDocs)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.4 (2026-03-03)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHardened social cards plugin by switching to sandboxed environment\u003c/li\u003e\n\u003cli\u003eUpdated MkDocs 2.0 incompatibility warning\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.3 (2026-02-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8567\"\u003e#8567\u003c/a\u003e: Print MkDocs 2.0 incompatibility warning to stderr\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.2 (2026-02-18)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eOpened up version ranges of optional dependencies for forward-compatibility\u003c/li\u003e\n\u003cli\u003eAdded warning to 'mkdocs build' about impending MkDocs 2.0 incompatibility\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.1 (2025-12-18)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated requests to 2.30+ to mitigate CVE in urllib\u003c/li\u003e\n\u003cli\u003eFixed privacy plugin not picking up protocol-relative URLs\u003c/li\u003e\n\u003cli\u003eFixed \u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8542\"\u003e#8542\u003c/a\u003e: false positives and negatives captured in privacy plugin\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.0 (2025-11-11)\u003c/p\u003e\n\u003cp\u003e⚠️ Material for MkDocs is now in maintenance mode\u003c/p\u003e\n\u003cp\u003eThis is the last release of Material for MkDocs that will receive new features.\nGoing forward, the Material for MkDocs team focuses on Zensical, a next-gen\nstatic site generator built from first principles. We will provide critical\nbug fixes and security updates for Material for MkDocs for 12 months at least.\u003c/p\u003e\n\u003cp\u003eRead the full announcement on our blog:\n\u003ca href=\"https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\"\u003ehttps://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis release includes all features that were previously exclusive to the\nInsiders edition. These features are now freely available to everyone.\u003c/p\u003e\n\u003cp\u003eNote on deprecated plugins: The projects and typeset plugins are included in\nthis release, but must be considered deprecated. Both plugins proved\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/squidfunk/mkdocs-material/commit/b3e6dd886a974aa8200759ecfd7db28c598a2894\"\u003e\u003ccode\u003eb3e6dd8\u003c/code\u003e\u003c/a\u003e Prepare 9.7.7 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/52fb6be8aafe326419f34dc94d3211e7bbfbfb25\"\u003e\u003ccode\u003e52fb6be\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/901e6335cc80b0f12e46a1e34bd85e983dd78a6e\"\u003e\u003ccode\u003e901e633\u003c/code\u003e\u003c/a\u003e Added \u003ccode\u003eSECURITY.md\u003c/code\u003e with EOL notice\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/5b36f2ac499a45905e246bc66bbee2858ef6556f\"\u003e\u003ccode\u003e5b36f2a\u003c/code\u003e\u003c/a\u003e Bump js-yaml from 4.1.1 to 4.2.0 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8598\"\u003e#8598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/2d11e7bc92c59b86d6ac0da2e38044fb4befa6e0\"\u003e\u003ccode\u003e2d11e7b\u003c/code\u003e\u003c/a\u003e Bump form-data from 3.0.4 to 3.0.5 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8597\"\u003e#8597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/ae05a534a8c8e1c58eb6aa55d460d309bcfce22b\"\u003e\u003ccode\u003eae05a53\u003c/code\u003e\u003c/a\u003e Bump esbuild from 0.27.2 to 0.28.1 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8596\"\u003e#8596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/434af93166e5b90b78bba1295ca5a140fc67d0bc\"\u003e\u003ccode\u003e434af93\u003c/code\u003e\u003c/a\u003e Bump shell-quote from 1.7.3 to 1.8.4 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8593\"\u003e#8593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/4447cdadcbe8bc82570e9f1ae2b970f461b03b68\"\u003e\u003ccode\u003e4447cda\u003c/code\u003e\u003c/a\u003e Documentation (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8590\"\u003e#8590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/8f8d551c9c5296dfc2a5ede35047bfb491d66bc9\"\u003e\u003ccode\u003e8f8d551\u003c/code\u003e\u003c/a\u003e Updated copyright year (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8588\"\u003e#8588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/08d8514d491782b4ac46673bcfdedb2f6fc85f3d\"\u003e\u003ccode\u003e08d8514\u003c/code\u003e\u003c/a\u003e Bump fast-uri from 3.0.3 to 3.1.2 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8587\"\u003e#8587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/squidfunk/mkdocs-material/compare/9.7.6...9.7.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.4 to 1.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\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/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\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/mkdocstrings/mkdocstrings/commit/9a11dcb8e9b39ff6e1a22abdd362350de4e68e9f\"\u003e\u003ccode\u003e9a11dcb\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e\u003ccode\u003e4732798\u003c/code\u003e\u003c/a\u003e fix: Stop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ecbaa9a05dde5bdc83accf8814fa1c9a1ffe1473\"\u003e\u003ccode\u003eecbaa9a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/64260f748f3db8b301a9d6fa05b2609ab6f6876c\"\u003e\u003ccode\u003e64260f7\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003e\u003ccode\u003eacc0da3\u003c/code\u003e\u003c/a\u003e fix: Parse inventory project and version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ec45a9b7a1301a4c70e02e6c92e1b9caff6df61f\"\u003e\u003ccode\u003eec45a9b\u003c/code\u003e\u003c/a\u003e ci: Fix warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ce2199c5195535f8c3b4907dd3ac7de2181925cc\"\u003e\u003ccode\u003ece2199c\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README (\u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/823\"\u003e#823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asgiref` from 3.11.1 to 3.12.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/asgiref/blob/main/CHANGELOG.txt\"\u003easgiref's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.1 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRestored the previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape, which was\nrelied on by some APM services. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/572\"\u003e#572\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNote, this change was available whilst maintaining the underlying fix (from\n\u003ca href=\"https://redirect.github.com/django/asgiref/issues/564\"\u003e#564\u003c/a\u003e). It does not constitute an API stability promise. Ideally APMs are\n\u003cem\u003enot\u003c/em\u003e monkey patching internal APIs, and future changes will be made here if\nneeded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12.0 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAsyncToSync\u003c/code\u003e no longer captures the running event loop on\ninstantiation. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis resolves a series of deadlocks that users experienced after asgiref 3.9.0,\nparticularly with pytest-asyncio. pytest-asyncio stops the event loop between\ntests, and long-running unawaited futures could find themselves trying to\nschedule work onto a stopped loop, and so would never complete. Ideally, code\nshould be structured to await long-running futures before returning, but this\nchange should help users experiencing issues here.\u003c/p\u003e\n\u003cp\u003eThe loop is now resolved when the callable is invoked rather than when it is\ncreated. If \u003ccode\u003easync_to_sync\u003c/code\u003e is called from within \u003ccode\u003esync_to_async\u003c/code\u003e, the\nparent event loop is still used, as before.\u003c/p\u003e\n\u003cp\u003eThe possibility of deadlock therefore remains in some nested patterns. For\nexample, an async function may call a long-running \u003ccode\u003esync_to_async\u003c/code\u003e function\nthat itself uses \u003ccode\u003easync_to_sync\u003c/code\u003e; if the outer function returns before the\nsync future completes, the parent event loop may already be stopped, and the\nnested calls cannot be driven to completion.\u003c/p\u003e\n\u003cp\u003eThis is not a bug in asgiref — the same patterns deadlock in plain asyncio. As\nabove, restructure your code to await the \u003ccode\u003esync_to_async\u003c/code\u003e future before\nexiting the driving coroutine.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an event loop deadlock when exiting \u003ccode\u003eThreadSensitiveContext\u003c/code\u003e\nwhile its executor thread was still blocked waiting on the event loop.\n(\u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for EOL Python 3.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eStatelessServer.run()\u003c/code\u003e failing on Python 3.14, where\n\u003ccode\u003easyncio.get_event_loop()\u003c/code\u003e no longer creates an event loop if none\nexists. It now uses \u003ccode\u003easyncio.run()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/559\"\u003e#559\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eLocal\u003c/code\u003e leaking data between unrelated sync threads when\n\u003ccode\u003esys.flags.thread_inherit_context\u003c/code\u003e is enabled (Python 3.14+), so a newly\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/ef9d4b8b371cf8a7bb63dea3d0fdc60923e9e081\"\u003e\u003ccode\u003eef9d4b8\u003c/code\u003e\u003c/a\u003e Releasing 3.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/34fba6328f67a753d814c280811fd34094bd1f6c\"\u003e\u003ccode\u003e34fba63\u003c/code\u003e\u003c/a\u003e Restore previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a43900c131874be571c6afdca642d4054eed0acf\"\u003e\u003ccode\u003ea43900c\u003c/code\u003e\u003c/a\u003e Separate mypy from tests extra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/1b7c338591054c04ff6c140d899ced28b803b4e0\"\u003e\u003ccode\u003e1b7c338\u003c/code\u003e\u003c/a\u003e Releasing 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/157d9d4168434d73b1bb5a619f947b74ccbf1fc8\"\u003e\u003ccode\u003e157d9d4\u003c/code\u003e\u003c/a\u003e Renovate precommit (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/deda0d4fd8d3997dddd9646dd9ef7e0b6d3e59a5\"\u003e\u003ccode\u003ededa0d4\u003c/code\u003e\u003c/a\u003e Test free-threading builds and fix Local data leak for thread_inherit_context...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a54250a24ad770616d3afcc37af3186558562041\"\u003e\u003ccode\u003ea54250a\u003c/code\u003e\u003c/a\u003e Don’t capture the event loop in \u003ccode\u003eAsyncToSync.__init__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/836356a2802247a0963177197b50cbd7476d7950\"\u003e\u003ccode\u003e836356a\u003c/code\u003e\u003c/a\u003e Use asyncio.run in StatelessServer.run (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/e04afd54ba29bb277ba6177dc898c73c129446f3\"\u003e\u003ccode\u003ee04afd5\u003c/code\u003e\u003c/a\u003e Dropped support for Python 3.9. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/543\"\u003e#543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/95d2430a346be7f40652d2eabff84fe54fbc725d\"\u003e\u003ccode\u003e95d2430\u003c/code\u003e\u003c/a\u003e Fixed \u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e: ThreadSensitiveContext.\u003cstrong\u003eaexit\u003c/strong\u003e blocking the event loop. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/563\"\u003e#563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/asgiref/compare/3.11.1...3.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.6.17 to 2026.7.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f4bc676bc101fe2235846e37044e8c693d6cbaf4\"\u003e\u003ccode\u003ef4bc676\u003c/code\u003e\u003c/a\u003e 2026.07.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/428\"\u003e#428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/4c91f9c5f9b4676d40d2930025ba04d80dd536f6\"\u003e\u003ccode\u003e4c91f9c\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.3.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/01a66c5cf32eadb8f03a0504c24cb44f6d581248\"\u003e\u003ccode\u003e01a66c5\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/eb355f41cb71f71012ecf1a4d27a57d0ee2b1337\"\u003e\u003ccode\u003eeb355f4\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/474e6fc996d55b91632248da0bade702504e62dc\"\u003e\u003ccode\u003e474e6fc\u003c/code\u003e\u003c/a\u003e Include tests in the source distribution (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/424\"\u003e#424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a31ef39bb5906af7dc9729890f7e4e04e75afdae\"\u003e\u003ccode\u003ea31ef39\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/98eb2c76a9c7a8519912023dca00f762bbcd59af\"\u003e\u003ccode\u003e98eb2c7\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.3 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.06.17...2026.07.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMinimize internal Python API usage for interpreter and thread state sampling where possible. Avoids breaking ABI change in Python \u0026gt;= 3.15.0b4 (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/pull/269\"\u003epython-cffi/cffi#269\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\"\u003ehttps://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/fd33e7700f0ebafe6f30bd5053f13327221b77a2\"\u003e\u003ccode\u003efd33e77\u003c/code\u003e\u003c/a\u003e New release 2.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/56a7876b8cd3b2d8148233a90e0121d74cd83852\"\u003e\u003ccode\u003e56a7876\u003c/code\u003e\u003c/a\u003e Use PyGILState_Ensure to avoid accessing CPython internals (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/269\"\u003e#269\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.5.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/e239bdc5cc1eb1f0db08d4046ad531f805dbea71\"\u003e\u003ccode\u003ee239bdc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/795\"\u003e#795\u003c/a\u003e from jawah/release-3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/648ad776db64a00aa7efd70a94656ac43784abb3\"\u003e\u003ccode\u003e648ad77\u003c/code\u003e\u003c/a\u003e docs: update faq\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fab27492c39baa61aca12826022e266781108570\"\u003e\u003ccode\u003efab2749\u003c/code\u003e\u003c/a\u003e docs: write changelog for 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/7d32774e75d16cccd3d22c758a77fca135952787\"\u003e\u003ccode\u003e7d32774\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/9a69f609f254ba4bfe9d0cbf375728e43360cdf2\"\u003e\u003ccode\u003e9a69f60\u003c/code\u003e\u003c/a\u003e docs: update data/info\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5dcc6dd81a8a0a4bd525f8d6f508da8285caf402\"\u003e\u003ccode\u003e5dcc6dd\u003c/code\u003e\u003c/a\u003e perf: charinfo cache access optimization in cython\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/ea3b4479270762be1228562c590e5a212727f208\"\u003e\u003ccode\u003eea3b447\u003c/code\u003e\u003c/a\u003e fix: do not validate-decode large payload when md says it's noise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a05917f87b5f71d6022d8abe2b0af239f65c1111\"\u003e\u003ccode\u003ea05917f\u003c/code\u003e\u003c/a\u003e chore: allow setuptools 84 builds (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/3325d87c3c73fa1a8746947151faaf9a41177543\"\u003e\u003ccode\u003e3325d87\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/792\"\u003e#792\u003c/a\u003e from jawah/update-cibuildwheel-action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/77203b104216a6d578a682b5ac0514750aa988f7\"\u003e\u003ccode\u003e77203b1\u003c/code\u003e\u003c/a\u003e chore: reformat noxfile.py\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.14.3 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.0 — 2026-07-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSince 7.14.0, reporting commands implicitly combine parallel data files. Now those commands have a new option \u003ccode\u003e--keep-combined\u003c/code\u003e to retain the data files after combining them instead of the default, which is to delete them. Finishes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2198\"\u003eissue 2198\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report would incorrectly count excluded functions as uncovered, as described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2205\"\u003eissue 2205\u003c/a\u003e. This is now fixed thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2206\"\u003eMartin Kuntz Jacobsen\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWhen running your program, coverage now correctly sets \u003ccode\u003eyourmodule.__spec__.loader\u003c/code\u003e as \u003ca href=\"\"\u003estrongly recommended\u003c/a\u003e, avoiding the deprecation warning described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2208\"\u003eissue 2208\u003c/a\u003e. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2209\"\u003eA5rocks\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: with Python 3.10, running with the \u003ccode\u003e-I\u003c/code\u003e (isolated mode) option didn’t correctly omit the current directory from the module search path, as described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2103\"\u003eissue 2103\u003c/a\u003e. That is now fixed thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2211\"\u003eIlia Sorokin\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.0\"\u003ecoverage 7.15.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.0\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically\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/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.3...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django` from 5.2.15 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/5.2.15...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-silk` from 5.5.0 to 5.5.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jazzband/django-silk/releases\"\u003edjango-silk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.5.2\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/jazzband/django-silk/tree/5.5.2\"\u003e5.5.2\u003c/a\u003e (2026-08-11)\u003c/h2\u003e\n\u003cp\u003e:release-by: Albert Wang (\u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e)\n\u003ca href=\"https://github.com/jazzband/django-silk/compare/5.5.0..5.5.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis is a re-release of 5.5.1 due to build/release issues.\u003c/p\u003e\n\u003cp\u003eThis will be the final release to support Django 4.2 and Django 5.1.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix making a release build (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/897\"\u003e#897\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/jazzband/django-silk/tree/5.5.1\"\u003e5.5.1\u003c/a\u003e (2026-08-01)\u003c/h2\u003e\n\u003cp\u003e:release-by: Albert Wang (\u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e)\n\u003ca href=\"https://github.com/jazzband/django-silk/compare/5.5.0..5.5.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis will be the final release to support Django 4.2 and Django 5.1\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix HTML in request_summary.html (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/852\"\u003e#852\u003c/a\u003e) \u003ca href=\"https://github.com/JortRoelofs\"\u003e\u003ccode\u003e@​JortRoelofs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix filtering for JS content (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/868\"\u003e#868\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix silk collector finalise raising TypeError when a \u0026quot;model\u0026quot; key is present in query dict (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/872\"\u003e#872\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExclude NULL view_names from View filter dropdown (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/882\"\u003e#882\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix FiltersManager.get() raising AttributeError without session support (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/887\"\u003e#887\u003c/a\u003e) \u003ca href=\"https://github.com/agu2347\"\u003e\u003ccode\u003e@​agu2347\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AttributeError generating curl command for non-string query params (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/885\"\u003e#885\u003c/a\u003e) \u003ca href=\"https://github.com/agu2347\"\u003e\u003ccode\u003e@​agu2347\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures/Enhancements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/892\"\u003e#892\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\u003cp\u003e\u003cstrong\u003eMaintenance and Cleanup:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix test coverage flakiness (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/850\"\u003e#850\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix test project (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/871\"\u003e#871\u003c/a\u003e) \u003ca href=\"https://github.com/VaishnavGhenge\"\u003e\u003ccode\u003e@​VaishnavGhenge\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDependency updates\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e5.5.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/jazzband/django-silk/tree/5.5.1\"\u003e5.5.1\u003c/a\u003e (2026-08-01)\u003c/h2\u003e\n\u003cp\u003e:release-by: Albert Wang (\u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e)\n\u003ca href=\"https://github.com/jazzband/django-silk/compare/5.5.0..5.5.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis will be the final release to support Django 4.2 and Django 5.1\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix HTML in request_summary.html (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/852\"\u003e#852\u003c/a\u003e) \u003ca href=\"https://github.com/JortRoelofs\"\u003e\u003ccode\u003e@​JortRoelofs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix filtering for JS content (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/868\"\u003e#868\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix silk collector finalise raising TypeError when a \u0026quot;model\u0026quot; key is present in query dict (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/872\"\u003e#872\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jazzband/django-silk/blob/master/CHANGELOG.md\"\u003edjango-silk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/jazzband/django-silk/tree/5.5.2\"\u003e5.5.2\u003c/a\u003e (2026-08-11)\u003c/h2\u003e\n\u003cp\u003e:release-by: Albert Wang (\u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e)\n\u003ca href=\"https://github.com/jazzband/django-silk/compare/5.5.0..5.5.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis is a re-release of 5.5.1 due to build/release issues.\u003c/p\u003e\n\u003cp\u003eThis will be the final release to support Django 4.2 and Django 5.1.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix making a release build (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/897\"\u003e#897\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/jazzband/django-silk/tree/5.5.1\"\u003e5.5.1\u003c/a\u003e (2026-08-01)\u003c/h2\u003e\n\u003cp\u003e:release-by: Albert Wang (\u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e)\n\u003ca href=\"https://github.com/jazzband/django-silk/compare/5.5.0..5.5.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis will be the final release to support Django 4.2 and Django 5.1\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix HTML in request_summary.html (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/852\"\u003e#852\u003c/a\u003e) \u003ca href=\"https://github.com/JortRoelofs\"\u003e\u003ccode\u003e@​JortRoelofs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix filtering for JS content (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/868\"\u003e#868\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix silk collector finalise raising TypeError when a \u0026quot;model\u0026quot; key is present in query dict (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/872\"\u003e#872\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExclude NULL view_names from View filter dropdown (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/882\"\u003e#882\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix FiltersManager.get() raising AttributeError without session support (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/887\"\u003e#887\u003c/a\u003e) \u003ca href=\"https://github.com/agu2347\"\u003e\u003ccode\u003e@​agu2347\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AttributeError generating curl command for non-string query params (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/885\"\u003e#885\u003c/a\u003e) \u003ca href=\"https://github.com/agu2347\"\u003e\u003ccode\u003e@​agu2347\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures/Enhancements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/892\"\u003e#892\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\u003cp\u003e\u003cstrong\u003eMaintenance and Cleanup:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix test coverage flakiness (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/850\"\u003e#850\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix test project (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/871\"\u003e#871\u003c/a\u003e) \u003ca href=\"https://github.com/VaishnavGhenge\"\u003e\u003ccode\u003e@​VaishnavGhenge\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDependency updates\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/jazzband/django-silk/commit/e04dc567b0a17bbd8630f3e0dbffaabf2bfb97c0\"\u003e\u003ccode\u003ee04dc56\u003c/code\u003e\u003c/a\u003e Release 5.5.2 (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/899\"\u003e#899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/d73d5deb0db91af13d819ba0153b2466f2f0dcd3\"\u003e\u003ccode\u003ed73d5de\u003c/code\u003e\u003c/a\u003e Build releases with PEP 517 so setuptools_scm dependencies resolve (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/897\"\u003e#897\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/9bcf96475f032d3ea2738e863a52d263dd276c4b\"\u003e\u003ccode\u003e9bcf964\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/898\"\u003e#898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/4e1f4872538c38f01ee330acdcedabfdf079e018\"\u003e\u003ccode\u003e4e1f487\u003c/code\u003e\u003c/a\u003e Release 5.5.1 (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/894\"\u003e#894\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/0b256184243148e8ca56e145229b7422443c72fe\"\u003e\u003ccode\u003e0b25618\u003c/code\u003e\u003c/a\u003e Backfill tests (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/896\"\u003e#896\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/c139195ca8d9461860525e8454e4573f6ca6beba\"\u003e\u003ccode\u003ec139195\u003c/code\u003e\u003c/a\u003e Replace filter actions with native buttons (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/890\"\u003e#890\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/92f3c6bf54d68900802385b20f524cde69ad2c3b\"\u003e\u003ccode\u003e92f3c6b\u003c/code\u003e\u003c/a\u003e Simplify structure of TestFiltersManager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/7f25b9ff017eb138de6fea598bf46b23a1c49856\"\u003e\u003ccode\u003e7f25b9f\u003c/code\u003e\u003c/a\u003e Fix AttributeError generating curl command for non-string query params (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/885\"\u003e#885\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/db21120d4f4ec582c7f5934a062dfcdb5f84c6b0\"\u003e\u003ccode\u003edb21120\u003c/code\u003e\u003c/a\u003e Fix FiltersManager.get() raising AttributeError without session support (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/9dfaa1de97800abec0eccf274f13b04d49d4ec8b\"\u003e\u003ccode\u003e9dfaa1d\u003c/code\u003e\u003c/a\u003e Exclude NULL view_names from the View filter dropdown (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/882\"\u003e#882\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jazzband/django-silk/compare/5.5.0...5.5.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs` from 6.0.6 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.6...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs-ext` from 6.0.6 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com...\n\n_Description has been truncated_","html_url":"https://github.com/Fawwad-Hassan/AIO_HWInventory/pull/26","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fawwad-Hassan%2FAIO_HWInventory/issues/26","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/26/packages"},{"uuid":"5243643953","node_id":"PR_kwDOUDghOM8AAAABA6DMVw","number":5,"state":"closed","title":"Bump the python group with 15 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T14:38:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-25T08:22:03.000Z","updated_at":"2026-09-04T14:38:05.000Z","time_to_close":886560,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":15,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"coverage","old_version":"7.15.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djangorestframework-stubs","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.43.2","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.1","new_version":"0.16.4","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 15 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.3` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.1` | `3.18.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.43.2` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.1` | `0.16.4` |\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.3 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.3...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.7 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.7...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field\u003c/code\u003e corrupting concatenated keys (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/02a46831ceb213421761f312e1368fa7b7e796d9\"\u003e\u003ccode\u003e02a4683\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etestcase_databases\u003c/code\u003e mapping of \u003ccode\u003emulti_db = False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/bc85eb958b63b752cbd7454d6378e51ca50d891d\"\u003e\u003ccode\u003ebc85eb9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_decorators\u003c/code\u003e hoisting values above their definitions (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/4eb5abf3734ba10c96dd53abdf98e50c78c4adae\"\u003e\u003ccode\u003e4eb5abf\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_register\u003c/code\u003e referencing models defined after the admin class (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d782084a4fe43286d6b4b2d11676efad0a1356cb\"\u003e\u003ccode\u003ed782084\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003esettings_storages\u003c/code\u003e erasing settings referenced elsewhere (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/2f3eb7571f87ae8c62389ac8f977935f81fbe58e\"\u003e\u003ccode\u003e2f3eb75\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etest_http_headers\u003c/code\u003e precedence when merging into \u003ccode\u003eheaders=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d750615a98098ff0c44477041932a04089d5aa47\"\u003e\u003ccode\u003ed750615\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003estringagg\u003c/code\u003e moving import despite bare \u003ccode\u003eStringAgg\u003c/code\u003e references (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/49cb8b9c2297d329a8f858beb54fb34e7274830a\"\u003e\u003ccode\u003e49cb8b9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eutils_timezone\u003c/code\u003e matching aliased \u003ccode\u003eutc\u003c/code\u003e imports (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-upgrade/compare/1.31.1...1.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework-stubs` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/releases\"\u003edjangorestframework-stubs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThis is the first version to be based on DRF 3.18\u003c/li\u003e\n\u003cli\u003eThis is the last version to support \u003ccode\u003edjango-stubs\u003c/code\u003e 6.0.x - next release will require 6.1.x\u003c/li\u003e\n\u003cli\u003eThis is the last ver...\n\n_Description has been truncated_","html_url":"https://github.com/rl-institut/SustAgriTool/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/rl-institut%2FSustAgriTool/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"},{"uuid":"5233154581","node_id":"PR_kwDOS9VYHs8AAAABAxtqTQ","number":66,"state":"closed","title":"chore(deps): bump the python group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T09:11:09.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-24T09:25:58.000Z","updated_at":"2026-09-04T09:11:11.000Z","time_to_close":949511,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python","update_count":20,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"redis","old_version":"8.0.0","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"coverage","old_version":"7.14.1","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.5","new_version":"6.1.0"},{"name":"djangorestframework-stubs","old_version":"3.17.0","new_version":"3.18.0","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.39.2","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest","old_version":"9.1.0","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.18","new_version":"0.16.4","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail[mailgun]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.0` | `8.1.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.1` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.5` | `6.1.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.0` | `3.18.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.39.2` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.1.0` | `9.1.1` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.18` | `0.16.4` |\n\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[mailgun]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[mailgun]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[mailgun]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `drf-spectacular` from 0.29.0 to 0.30.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tfranzel/drf-spectacular/releases\"\u003edrf-spectacular's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.30.0\u003c/h2\u003e\n\u003cp\u003eAfter working through the backlog for several week, we are finally in a comfortable place again. Thank you to all contributors and users that waited patiently for me the catch up. It does not include all the PRs that were opened, but imho the most critical ones.\u003c/p\u003e\n\u003cp\u003eThis release includes many small improvement, a few bug fixes, updates to the test suite and a renovated test matrix. Some minor schema corrections are to be expected, but nothing drastic. It is mostly fixing small inconsistencies and improving corner cases.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression introduced in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1450\"\u003e#1450\u003c/a\u003e by \u003ca href=\"https://github.com/hoefling\"\u003e\u003ccode\u003e@​hoefling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1469\"\u003etfranzel/drf-spectacular#1469\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dependency definition for Django 5.2 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1487\"\u003etfranzel/drf-spectacular#1487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add support for Django 6.0 and and DRF 3.17 by \u003ca href=\"https://github.com/vgrozdanic\"\u003e\u003ccode\u003e@​vgrozdanic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1496\"\u003etfranzel/drf-spectacular#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Support for unsigned integers uint16, uint32 and uint64 by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1483\"\u003etfranzel/drf-spectacular#1483\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplement x-spec-enum-id for type hint Choices. by \u003ca href=\"https://github.com/noamkush\"\u003e\u003ccode\u003e@​noamkush\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1486\"\u003etfranzel/drf-spectacular#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarifies Docs in Customizations.rst by \u003ca href=\"https://github.com/APCBoston\"\u003e\u003ccode\u003e@​APCBoston\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1489\"\u003etfranzel/drf-spectacular#1489\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd setting to disable docstring extraction by \u003ca href=\"https://github.com/philipstarkey\"\u003e\u003ccode\u003e@​philipstarkey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1491\"\u003etfranzel/drf-spectacular#1491\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add support for polymorphic built-in drf support by \u003ca href=\"https://github.com/mastacheata\"\u003e\u003ccode\u003e@​mastacheata\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1490\"\u003etfranzel/drf-spectacular#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocument \u003ccode\u003edjango-rest-knox\u003c/code\u003e support by \u003ca href=\"https://github.com/johnthagen\"\u003e\u003ccode\u003e@​johnthagen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1503\"\u003etfranzel/drf-spectacular#1503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd help text to spectacular management command arguments \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1175\"\u003e#1175\u003c/a\u003e by \u003ca href=\"https://github.com/jbbqqf\"\u003e\u003ccode\u003e@​jbbqqf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1502\"\u003etfranzel/drf-spectacular#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echange conflicting license field for 3.8 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1504\"\u003etfranzel/drf-spectacular#1504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePr1438 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1505\"\u003etfranzel/drf-spectacular#1505\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd blueprint for django-rest-knox by \u003ca href=\"https://github.com/johnthagen\"\u003e\u003ccode\u003e@​johnthagen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1506\"\u003etfranzel/drf-spectacular#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePr1499 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1511\"\u003etfranzel/drf-spectacular#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eType hint build_bearer_security_scheme_object by \u003ca href=\"https://github.com/johnthagen\"\u003e\u003ccode\u003e@​johnthagen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1509\"\u003etfranzel/drf-spectacular#1509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHousekeeping by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1512\"\u003etfranzel/drf-spectacular#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePr1501 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1514\"\u003etfranzel/drf-spectacular#1514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nullable FileField response schema when blank=True (\u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1493\"\u003e#1493\u003c/a\u003e) by \u003ca href=\"https://github.com/mojtabasohrabi\"\u003e\u003ccode\u003e@​mojtabasohrabi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1501\"\u003etfranzel/drf-spectacular#1501\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/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1487\"\u003etfranzel/drf-spectacular#1487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vgrozdanic\"\u003e\u003ccode\u003e@​vgrozdanic\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1496\"\u003etfranzel/drf-spectacular#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/noamkush\"\u003e\u003ccode\u003e@​noamkush\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1486\"\u003etfranzel/drf-spectacular#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/APCBoston\"\u003e\u003ccode\u003e@​APCBoston\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1489\"\u003etfranzel/drf-spectacular#1489\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/philipstarkey\"\u003e\u003ccode\u003e@​philipstarkey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1491\"\u003etfranzel/drf-spectacular#1491\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mastacheata\"\u003e\u003ccode\u003e@​mastacheata\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1490\"\u003etfranzel/drf-spectacular#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jbbqqf\"\u003e\u003ccode\u003e@​jbbqqf\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1502\"\u003etfranzel/drf-spectacular#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mojtabasohrabi\"\u003e\u003ccode\u003e@​mojtabasohrabi\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1501\"\u003etfranzel/drf-spectacular#1501\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tfranzel/drf-spectacular/compare/0.29.0...0.30.0\"\u003ehttps://github.com/tfranzel/drf-spectacular/compare/0.29.0...0.30.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/tfranzel/drf-spectacular/blob/master/CHANGELOG.rst\"\u003edrf-spectacular's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.30.0 (2026-07-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd OAS 3.2 schema for validation \u0026amp; test\u003c/li\u003e\n\u003cli\u003eType hint build_bearer_security_scheme_object (\u003ccode\u003e[#1509](https://github.com/tfranzel/drf-spectacular/issues/1509) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1509\u0026gt;\u003c/code\u003e_) [johnthagen]\u003c/li\u003e\n\u003cli\u003eFix formatted CharField allow_blank handling (\u003ccode\u003e[#1511](https://github.com/tfranzel/drf-spectacular/issues/1511) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1511\u0026gt;\u003c/code\u003e\u003cem\u003e, (\u003ccode\u003e[#1499](https://github.com/tfranzel/drf-spectacular/issues/1499) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1499\u0026gt;\u003c/code\u003e\u003c/em\u003e)) [Luciano de la Iglesia]\u003c/li\u003e\n\u003cli\u003eConsider allOf anyOf with nullable on OAS3.1 \u003ccode\u003e[#1480](https://github.com/tfranzel/drf-spectacular/issues/1480) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1480\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eProper handling for OAS 3.2\u003c/li\u003e\n\u003cli\u003efix modification of user-provided schematas \u003ccode\u003e[#1500](https://github.com/tfranzel/drf-spectacular/issues/1500) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1500\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003erelax contraint on oneOf null case with OAS3.1 \u003ccode\u003e[#1480](https://github.com/tfranzel/drf-spectacular/issues/1480) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1480\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eAdd blueprint for django-rest-knox (\u003ccode\u003e[#1506](https://github.com/tfranzel/drf-spectacular/issues/1506) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1506\u0026gt;\u003c/code\u003e_) [johnthagen]\u003c/li\u003e\n\u003cli\u003eMitigate GeneratedField lost arguments and special case for DecimalField \u003ccode\u003e[#1166](https://github.com/tfranzel/drf-spectacular/issues/1166) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1166\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eWebhook explicit operationId (\u003ccode\u003e[#1505](https://github.com/tfranzel/drf-spectacular/issues/1505) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1505\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003echange conflicting license field for 3.8 (\u003ccode\u003e[#1504](https://github.com/tfranzel/drf-spectacular/issues/1504) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1504\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eDocument django-rest-knox support [johnthagen]\u003c/li\u003e\n\u003cli\u003eadd help text to spectacular management command arguments \u003ccode\u003e[#1175](https://github.com/tfranzel/drf-spectacular/issues/1175) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1175\u0026gt;\u003c/code\u003e_ [Jean-Baptiste Braun]\u003c/li\u003e\n\u003cli\u003eMark FileField as nullable in response when not required \u003ccode\u003e[#1493](https://github.com/tfranzel/drf-spectacular/issues/1493) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1493\u0026gt;\u003c/code\u003e_ [mojtaba sohrabi]\u003c/li\u003e\n\u003cli\u003eExtend Choices hint fix with generated label description \u003ccode\u003e[#1486](https://github.com/tfranzel/drf-spectacular/issues/1486) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1486\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eSuppress py\u0026lt;=3.14 deprecation warning \u003ccode\u003e[#1497](https://github.com/tfranzel/drf-spectacular/issues/1497) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1497\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eRemove ancient DRF3.11 and Django2.2 due to contrib packages failing\u003c/li\u003e\n\u003cli\u003efeat: add support for django 6.0 and and drf 3.17 [Vjeran Grozdanic]\u003c/li\u003e\n\u003cli\u003eAdd setting to disable docstring extraction [Phil Starkey]\u003c/li\u003e\n\u003cli\u003efeat: add support for polymorphic built-in drf support [Benedikt Bauer]\u003c/li\u003e\n\u003cli\u003eClarifies post-processing hooks [Andy Piltser-Cowan]\u003c/li\u003e\n\u003cli\u003eClarifies customizations step 5 [Andy Piltser-Cowan]\u003c/li\u003e\n\u003cli\u003eFix dependency definition for Django 5.2 [Ülgen Sarıkavak]\u003c/li\u003e\n\u003cli\u003eImplement x-spec-enum-id for type hint Choices. [Noam Kushinsky]\u003c/li\u003e\n\u003cli\u003eAdd Support for unsigned integers uint16, uint32 and uint64 [Nicolas Delaby]\u003c/li\u003e\n\u003cli\u003eFix regression introduced in \u003ccode\u003e[#1450](https://github.com/tfranzel/drf-spectacular/issues/1450) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1450\u0026gt;\u003c/code\u003e_ (\u003ccode\u003e[#1469](https://github.com/tfranzel/drf-spectacular/issues/1469) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1469\u0026gt;\u003c/code\u003e_) [Oleg Höfling]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBreaking changes / important additions:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMany small improvement, bug fixes, updates to the test suite and renovated test matrix. Some minor schema corrections are to be expected, but nothing drastic.\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/tfranzel/drf-spectacular/commit/1a5c44a15b2d06744f49285f1f58992f938a05fa\"\u003e\u003ccode\u003e1a5c44a\u003c/code\u003e\u003c/a\u003e version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/6ba553fc827613d7b36efc9d9f53043e4a2e5443\"\u003e\u003ccode\u003e6ba553f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1514\"\u003e#1514\u003c/a\u003e from tfranzel/pr1501\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/d4787a4e2ef0ff4b7c6a72fe3dddf1ea8e8a963c\"\u003e\u003ccode\u003ed4787a4\u003c/code\u003e\u003c/a\u003e Adapt FileField null handling \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/d8679422975c68bc3a2c97c278957ec043d915c1\"\u003e\u003ccode\u003ed867942\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1512\"\u003e#1512\u003c/a\u003e from tfranzel/housekeeping26\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/5685cf8b731f9a93d9c66003ac2569d4ef7540a8\"\u003e\u003ccode\u003e5685cf8\u003c/code\u003e\u003c/a\u003e Add OAS 3.2 schema for validation \u0026amp; test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/9fa6f7c1f8d99ef14d9dfa11b89f432ba370242f\"\u003e\u003ccode\u003e9fa6f7c\u003c/code\u003e\u003c/a\u003e minor cleanup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/69033ea1e371fb254731c9e9164fd403ace3c5d4\"\u003e\u003ccode\u003e69033ea\u003c/code\u003e\u003c/a\u003e update linting version due to misleading security warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/d9e0de6717c9953b3e9c66da6a5bc6aefb714827\"\u003e\u003ccode\u003ed9e0de6\u003c/code\u003e\u003c/a\u003e Type hint build_bearer_security_scheme_object (\u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1509\"\u003e#1509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/9b18b302b697ba1a5e86271a7e4d090a5995cc21\"\u003e\u003ccode\u003e9b18b30\u003c/code\u003e\u003c/a\u003e Pr1499 (\u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1511\"\u003e#1511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/6e3c72ea5df8e8452a2b8c3e792a7cab23814446\"\u003e\u003ccode\u003e6e3c72e\u003c/code\u003e\u003c/a\u003e Consider allOf anyOf with nullable on OAS3.1 \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1480\"\u003e#1480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tfranzel/drf-spectacular/compare/0.29.0...0.30.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.0 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDI...\n\n_Description has been truncated_","html_url":"https://github.com/hhhylaiii/maiagent_reply_platform/pull/66","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/hhhylaiii%2Fmaiagent_reply_platform/issues/66","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/66/packages"},{"uuid":"5232428120","node_id":"PR_kwDOToTEA88AAAABAxIriw","number":20,"state":"closed","title":"build(deps): bump the python group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T07:57:59.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-24T08:00:08.000Z","updated_at":"2026-09-04T07:58:01.000Z","time_to_close":950271,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python","update_count":16,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"yfinance","old_version":"1.5.2","new_version":"1.6.0","repository_url":"https://github.com/ranaroussi/yfinance"},{"name":"coverage","old_version":"7.15.2","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djangorestframework-stubs","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.43.1","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.1","new_version":"0.16.4","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [yfinance](https://github.com/ranaroussi/yfinance) | `1.5.2` | `1.6.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.2` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.1` | `3.18.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.43.1` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.1` | `0.16.4` |\n\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `yfinance` from 1.5.2 to 1.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ranaroussi/yfinance/releases\"\u003eyfinance's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.6.0\u003c/h2\u003e\n\u003cp\u003eMain changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePrice repair improvements\u003c/li\u003e\n\u003cli\u003eFew new fields to Balance Sheet and Screener\u003c/li\u003e\n\u003cli\u003eMany little fixes\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFull changelog \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2935\"\u003e#2935\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/foley40\"\u003e\u003ccode\u003e@​foley40\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/dokson\"\u003e\u003ccode\u003e@​dokson\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vignesh-nagarajan-vn\"\u003e\u003ccode\u003e@​vignesh-nagarajan-vn\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/shanehull\"\u003e\u003ccode\u003e@​shanehull\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/DogInfantry\"\u003e\u003ccode\u003e@​DogInfantry\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/Kaif10\"\u003e\u003ccode\u003e@​Kaif10\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/DMZ22\"\u003e\u003ccode\u003e@​DMZ22\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/Aaritp\"\u003e\u003ccode\u003e@​Aaritp\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/etbala\"\u003e\u003ccode\u003e@​etbala\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/aleks-drozy\"\u003e\u003ccode\u003e@​aleks-drozy\u003c/code\u003e\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/ranaroussi/yfinance/blob/main/CHANGELOG.rst\"\u003eyfinance's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.6.0\u003c/h2\u003e\n\u003cp\u003eFeatures / improvements\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd missing balance sheet keys: FixedMaturityInvestments, EquityInves… \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2879\"\u003e#2879\u003c/a\u003e \u003ca href=\"https://github.com/foley40\"\u003e\u003ccode\u003e@​foley40\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix: Screener: add dividendyield and dividendpershare.lasttwelvemonths \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2888\"\u003e#2888\u003c/a\u003e \u003ca href=\"https://github.com/shanehull\"\u003e\u003ccode\u003e@​shanehull\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't claim 'possibly delisted' when Yahoo explains the missing data \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2903\"\u003e#2903\u003c/a\u003e \u003ca href=\"https://github.com/vignesh-nagarajan-vn\"\u003e\u003ccode\u003e@​vignesh-nagarajan-vn\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix error messages showing internal 15m interval for 30m requests \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2900\"\u003e#2900\u003c/a\u003e \u003ca href=\"https://github.com/vignesh-nagarajan-vn\"\u003e\u003ccode\u003e@​vignesh-nagarajan-vn\u003c/code\u003e\u003c/a\u003e\nFixes:\u003c/li\u003e\n\u003cli\u003eFix generic-unit timedelta DeprecationWarning for sub-day intervals (\u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2882\"\u003e#2882\u003c/a\u003e) \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2891\"\u003e#2891\u003c/a\u003e \u003ca href=\"https://github.com/DogInfantry\"\u003e\u003ccode\u003e@​DogInfantry\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: read-only 'Adj Close' array crash in dividend-adjust repair \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2897\"\u003e#2897\u003c/a\u003e \u003ca href=\"https://github.com/Kaif10\"\u003e\u003ccode\u003e@​Kaif10\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AttributeError in Lookup error handling (self.ticker -\u0026gt; self.query) \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2896\"\u003e#2896\u003c/a\u003e \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix: handle null result from Yahoo API in _fetch_info \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2906\"\u003e#2906\u003c/a\u003e \u003ca href=\"https://github.com/foley40\"\u003e\u003ccode\u003e@​foley40\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix multi-day interval TypeError and actually silence the numpy\u0026gt;=2.5 Timedelta warning \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2915\"\u003e#2915\u003c/a\u003e \u003ca href=\"https://github.com/DMZ22\"\u003e\u003ccode\u003e@​DMZ22\u003c/code\u003e\u003c/a\u003e\nPrice repair:\u003c/li\u003e\n\u003cli\u003ePrice repair fixes \u0026amp; improvements \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2908\"\u003e#2908\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix: repair=True should not permanently convert GBp/ZAc/ILA prices to main currency \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2907\"\u003e#2907\u003c/a\u003e \u003ca href=\"https://github.com/foley40\"\u003e\u003ccode\u003e@​foley40\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrice repair improvements \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2943\"\u003e#2943\u003c/a\u003e\nDocs / maintenance\u003c/li\u003e\n\u003cli\u003eFix pandas 3 timezone assertion in test_download_multi_small_interval \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2901\"\u003e#2901\u003c/a\u003e \u003ca href=\"https://github.com/vignesh-nagarajan-vn\"\u003e\u003ccode\u003e@​vignesh-nagarajan-vn\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix grammar and formatting in advanced documentation \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2909\"\u003e#2909\u003c/a\u003e \u003ca href=\"https://github.com/Aaritp\"\u003e\u003ccode\u003e@​Aaritp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRe-enable test_no_expensive_calls_introduced without requests_cache \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2911\"\u003e#2911\u003c/a\u003e \u003ca href=\"https://github.com/dokson\"\u003e\u003ccode\u003e@​dokson\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin ruff ruleset for deterministic CI \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2919\"\u003e#2919\u003c/a\u003e \u003ca href=\"https://github.com/dokson\"\u003e\u003ccode\u003e@​dokson\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate packaging to pyproject.toml \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2920\"\u003e#2920\u003c/a\u003e \u003ca href=\"https://github.com/dokson\"\u003e\u003ccode\u003e@​dokson\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix: NaN equality comparison  \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2933\"\u003e#2933\u003c/a\u003e \u003ca href=\"https://github.com/foley40\"\u003e\u003ccode\u003e@​foley40\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate to pyproject.toml \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2849\"\u003e#2849\u003c/a\u003e \u003ca href=\"https://github.com/etbala\"\u003e\u003ccode\u003e@​etbala\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: state download()'s actual returned index timezone contract \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2936\"\u003e#2936\u003c/a\u003e \u003ca href=\"https://github.com/aleks-drozy\"\u003e\u003ccode\u003e@​aleks-drozy\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/ranaroussi/yfinance/commit/93eb4c234acc7d0cf9d176e602b8443179546253\"\u003e\u003ccode\u003e93eb4c2\u003c/code\u003e\u003c/a\u003e Update GH actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/0af231f6a47eee5e773290830d228de0c20d5ee1\"\u003e\u003ccode\u003e0af231f\u003c/code\u003e\u003c/a\u003e Version 1.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/777dc546a2464ae1f8716fd1991da157d251575c\"\u003e\u003ccode\u003e777dc54\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2935\"\u003e#2935\u003c/a\u003e from ranaroussi/dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/9b3fcbcd1a43481611c04daf990e2032275306a5\"\u003e\u003ccode\u003e9b3fcbc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2943\"\u003e#2943\u003c/a\u003e from ranaroussi/price-repair-improvements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/8b85f90ff92d6f90c5f31fca4cb21235dfadbfc9\"\u003e\u003ccode\u003e8b85f90\u003c/code\u003e\u003c/a\u003e Price repair improvements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/f85430919a8c6f1876e35931aee529ed8ecf8f98\"\u003e\u003ccode\u003ef854309\u003c/code\u003e\u003c/a\u003e Fix regression in PR \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2907\"\u003e#2907\u003c/a\u003e (see last comment)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/984a687ac18fb864ffd3cd99b953a47e406d256d\"\u003e\u003ccode\u003e984a687\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2936\"\u003e#2936\u003c/a\u003e from aleks-drozy/docs/download-tz-contract\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/24ee2ff842515d730cac56c847a155981f7c03fe\"\u003e\u003ccode\u003e24ee2ff\u003c/code\u003e\u003c/a\u003e docs: state download()'s actual returned index timezone contract\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/d611015d485bee175bede120d6638066fef12d05\"\u003e\u003ccode\u003ed611015\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2915\"\u003e#2915\u003c/a\u003e from DMZ22/fix-timedelta-deprecations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/61780c70e9bf1a8cb896e7ebdf48d22e9679545a\"\u003e\u003ccode\u003e61780c7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2849\"\u003e#2849\u003c/a\u003e from etbala/dependency-management\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ranaroussi/yfinance/compare/1.5.2...1.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.2 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.2...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.7 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/summ...\n\n_Description has been truncated_","html_url":"https://github.com/santhoshkannan-dev/TradeLoom/pull/20","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/santhoshkannan-dev%2FTradeLoom/issues/20","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/20/packages"},{"uuid":"5230566016","node_id":"PR_kwDOTGLFX88AAAABAvqejw","number":27,"state":"closed","title":"build(deps): bump the python group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T02:47:04.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-24T02:47:58.000Z","updated_at":"2026-09-04T02:47:05.000Z","time_to_close":950346,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python","update_count":16,"packages":[{"name":"django","old_version":"6.0.6","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1","repository_url":"https://github.com/anymail/django-anymail"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"coverage","old_version":"7.14.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0"},{"name":"djlint","old_version":"1.39.4","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.20","new_version":"0.16.4","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.6` | `6.1` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.3` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.39.4` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.16.4` |\n\n\nUpdates `django` from 6.0.6 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.6...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\u003cbr /\u003e\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\u003cbr /\u003e\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\u003cbr /\u003e\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\u003cbr /\u003e\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\u003cbr /\u003e\nin Django's documentation for recommendations.\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.14.3 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.0 — 2026-07-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSince 7.14.0, reporting commands implicitly combine parallel data files. Now those commands have a new option \u003ccode\u003e--keep-combined\u003c/code\u003e to retain the data files after combining them instead of the default, which is to delete them. Finishes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2198\"\u003eissue 2198\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report would incorrectly count excluded functions as uncovered, as described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2205\"\u003eissue 2205\u003c/a\u003e. This is now fixed thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2206\"\u003eMartin Kuntz Jacobsen\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWhen running your program, coverage now correctly sets \u003ccode\u003eyourmodule.__spec__.loader\u003c/code\u003e as \u003ca href=\"\"\u003estrongly recommended\u003c/a\u003e, avoiding the deprecation warning described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2208\"\u003eissue 2208\u003c/a\u003e. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2209\"\u003eA5rocks\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: with Python 3.10, running with the \u003ccode\u003e-I\u003c/code\u003e (isolated mode) option didn’t correctly omit the current directory from the module search path, as described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2103\"\u003eissue 2103\u003c/a\u003e. That is now fixed thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2211\"\u003eIlia Sorokin\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.0\"\u003ecoverage 7.15.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.0\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically\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/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.3...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.6 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.6...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djlint` from 1.39.4 to 1.44.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/djlint/djLint/releases\"\u003edjlint's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.44.2\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eH037\u003c/code\u003e no longer reports two attributes whose names differ only before a \u003ccode\u003e.\u003c/code\u003e as duplicates (\u003ccode\u003edata-a.checked\u003c/code\u003e and \u003ccode\u003edata-b.checked\u003c/code\u003e, or alpine's \u003ccode\u003ex-on:click.prevent\u003c/code\u003e and \u003ccode\u003ex-on:keyup.prevent\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAn attribute whose name merely ends in the name a rule looks for is no longer mistaken for it. \u003ccode\u003edata-alt\u003c/code\u003e and \u003ccode\u003edata-x.alt\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent on an image with no \u003ccode\u003ealt\u003c/code\u003e, \u003ccode\u003edata-lang\u003c/code\u003e and \u003ccode\u003exml:lang\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, \u003ccode\u003edata-height\u003c/code\u003e and \u003ccode\u003edata-width\u003c/code\u003e silenced \u003ccode\u003eH006\u003c/code\u003e, \u003ccode\u003edata-name=\u0026quot;description\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH030\u003c/code\u003e and \u003ccode\u003edata-name=\u0026quot;keywords\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH031\u003c/code\u003e, a...\n\n_Description has been truncated_","html_url":"https://github.com/Ahmed-Abdelgawad-Dev/hotelx/pull/27","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahmed-Abdelgawad-Dev%2Fhotelx/issues/27","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/27/packages"},{"uuid":"5219007422","node_id":"PR_kwDOTs1Bhs8AAAABAnD6VA","number":15,"state":"closed","title":"Bump the python group across 1 directory with 15 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-03T23:38:00.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T23:38:18.000Z","updated_at":"2026-09-03T23:38:02.000Z","time_to_close":1123182,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":15,"packages":[{"name":"django","old_version":"6.0.7","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"coverage","old_version":"7.15.2","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djangorestframework-stubs","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.43.1","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.1","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 15 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.7` | `6.1` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.2` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.1` | `3.18.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.43.1` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.1` | `0.16.3` |\n\n\nUpdates `django` from 6.0.7 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.7...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.2 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.2...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.7 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.7...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field\u003c/code\u003e corrupting concatenated keys (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/02a46831ceb213421761f312e1368fa7b7e796d9\"\u003e\u003ccode\u003e02a4683\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etestcase_databases\u003c/code\u003e mapping of \u003ccode\u003emulti_db = False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/bc85eb958b63b752cbd7454d6378e51ca50d891d\"\u003e\u003ccode\u003ebc85eb9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_decorators\u003c/code\u003e hoisting values above their definitions (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/4eb5abf3734ba10c96dd53abdf98e50c78c4adae\"\u003e\u003ccode\u003e4eb5abf\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_register\u003c/code\u003e referencing models defined after the admin class (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d782084a4fe43286d6b4b2d11676efad0a1356cb\"\u003e\u003ccode\u003ed782084\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003esettings_storages\u003c/code\u003e erasing settings referenced elsewhere (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/2f3eb7571f87ae8c62389ac8f977935f81fbe58e\"\u003e\u003ccode\u003e2f3eb75\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etest_http_headers\u003c/code\u003e precedence when merging into \u003ccode\u003eheaders=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d750615a98098ff0c44477041932a04089d5aa47\"\u003e\u003ccode\u003ed750615\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003estringagg\u003c/code\u003e moving import despite bare \u003ccode\u003eStringAgg\u003c/code\u003e references (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/49cb8b9c2297d329a8f858beb54fb34e7274830a\"\u003e\u003ccode\u003e49cb8b9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eutils_timezone\u003c/code\u003e matching aliased \u003ccode\u003eutc\u003c/code\u003e imports (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-upgrade/compare/1.31.1...1.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework-stubs` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/releases\"\u003edjangorestframework-stubs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThis is the first version to be based on DRF 3.18\u003c/li\u003e\n\u003cli\u003eThis is the last version to support \u003ccode\u003edjango-stubs\u003c/code\u003e 6.0.x - next release will require 6.1.x\u003c/li\u003e\n\u003cli\u003eThis is the last version to support Python 3.10 - following django-stubs upstream\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop obsolete coreapi/coreschema from stubs (removed in DRF 3.17) by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1025\"\u003etypeddjango/djangorestframework-stubs#1025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate stubs for djangorestframework 3.18.0 by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1030\"\u003etypeddjango/djangorestframework-stubs#1030\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eHousekeeping\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUnlock django-stubs dev dependency pinning in pyproject.toml by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1033\"\u003etypeddjango/djangorestframework-stubs#1033\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 3.18.0 release by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1034\"\u003etypeddjango/djangorestframework-stubs#1034\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/compare/3.17.1...3.18.0\"\u003ehttps://github.com/typeddjango/djangorestframework-stubs/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/18a30a10d0f0f6811fbd52c27a68d5a0396ae3bb\"\u003e\u003ccode\u003e18a30a1\u003c/code\u003e\u003c/a\u003e Version 3.18.0 release (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/31c54035164fd91bc60cb384519ed34bf255e8fa\"\u003e\u003ccode\u003e31c5403\u003c/code\u003e\u003c/a\u003e Update stubs for djangorestframework 3.18.0 (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1030\"\u003e#1030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/40522032009bc3fb8914b5858ffc62979969c4d8\"\u003e\u003ccode\u003e4052203\u003c/code\u003e\u003c/a\u003e Unlock django-stubs pinning in pyproject.toml (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1033\"\u003e#1033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/ebb2bcc45fcdf9304d85efc7e8b2f477c4482b95\"\u003e\u003ccode\u003eebb2bcc\u003c/code\u003e\u003c/a\u003e Update astral-sh/setup-uv action to v10 (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1031\"\u003e#1031\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/c34d9bb79ada9af7293302c7fcb66ff344a56b69\"\u003e\u003ccode\u003ec34d9bb\u003c/code\u003e\u003c/a\u003e Update dependency django to ==6.1.* (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1023\"\u003e#1023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/762c2d1de8722c640b18afbc4dbf1b3423bd2b5b\"\u003e\u003ccode\u003e762c2d1\u003c/code\u003e\u003c/a\u003e Lock file maintenance (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1028\"\u003e#1028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/135195b6d8d52b3c833c65d010df8b4be5fae4ea\"\u003e\u003ccode\u003e135195b\u003c/code\u003e\u003c/a\u003e Update dependency pre-commit to v4.6.2 (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1027\"\u003e#1027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/41decd6d3de29391fd2aed96aa7750dab572bf40\"\u003e\u003ccode\u003e41decd6\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1026\"\u003e#1026\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/f5ced24033de0cd0ae75c8f3bbe76753ed2527d4\"\u003e\u003ccode\u003ef5ced24\u003c/code\u003e\u003c/a\u003e Remove coreapi/coreschema from stubs (DRF 3.17+) (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1025\"\u003e#1025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/b7ef8fb3a3654cb40f6352f0514050b3ed5a941b\"\u003e\u003ccode\u003eb7ef8fb\u003c/code\u003e\u003c/a\u003e Update dependency djangorestframework to v3.18.0 \u0026amp; create new allowlist (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1024\"\u003e#1024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djlint` from 1.43.1 to 1.44.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/djlint/djLint/releases\"\u003edjlint's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.44.2\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eH037\u003c/code\u003e no longer reports two attributes whose names differ only before a \u003ccode\u003e.\u003c/code\u003e as duplicates (\u003ccode\u003edata-a.checked\u003c/code\u003e and \u003ccode\u003edata-b.checked\u003c/code\u003e, or alpine's \u003ccode\u003ex-on:click.prevent\u003c/code\u003e and \u003ccode\u003ex-on:keyup.prevent\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAn attribute whose name merely ends in the name a rule looks for is no longer mistaken for it. \u003ccode\u003edata-alt\u003c/code\u003e and \u003ccode\u003edata-x.alt\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent on an image with no \u003ccode\u003ealt\u003c/code\u003e, \u003ccode\u003edata-lang\u003c/code\u003e and \u003ccode\u003exml:lang\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, \u003ccode\u003edata-height\u003c/code\u003e and \u003ccode\u003edata-width\u003c/code\u003e silenced \u003ccode\u003eH006\u003c/code\u003e, \u003ccode\u003edata-name=\u0026quot;description\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH030\u003c/code\u003e and \u003ccode\u003edata-name=\u0026quot;keywords\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH031\u003c/code\u003e, and \u003ccode\u003edata-x.id\u003c/code\u003e satisfied a \u003ccode\u003e\u0026lt;label for\u0026gt;\u003c/code\u003e for \u003ccode\u003eH042\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eA name written inside an attribute value is no longer read as an attribute. \u003ccode\u003etitle=\u0026quot;alt=x\u0026quot;\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent, \u003ccode\u003eclass=\u0026quot;language-en\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, and \u003ccode\u003etitle=\u0026quot;the ID=5\u0026quot;\u003c/code\u003e was reported by \u003ccode\u003eH010\u003c/code\u003e as an uppercase attribute name.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eH005\u003c/code\u003e no longer reports a tag whose name only starts with \u003ccode\u003ehtml\u003c/code\u003e, such as \u003ccode\u003e\u0026lt;htmlx\u0026gt;\u003c/code\u003e, and points at the \u003ccode\u003e\u0026lt;html\u0026gt;\u003c/code\u003e tag itself rather than at everything up to the last \u003ccode\u003e\u0026gt;\u003c/code\u003e in the file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.44.1\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFormatting no longer changes what the page renders. A space that shows was dropped (\u003ccode\u003e\u0026lt;span\u0026gt;a\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt; b \u0026lt;/span\u0026gt;\u003c/code\u003e rendered as \u003ccode\u003eab\u003c/code\u003e, \u003ccode\u003ea{% if x %} b {% endif %}c\u003c/code\u003e as \u003ccode\u003eabc\u003c/code\u003e), a space that shows nothing was added (\u003ccode\u003e\u0026lt;span\u0026gt;     \u0026lt;/span\u0026gt;\u003c/code\u003e became \u003ccode\u003e\u0026lt;span\u0026gt; \u0026lt;/span\u0026gt;\u003c/code\u003e), and moving a tag onto its own line could add one (\u003ccode\u003ex\u0026lt;img\u0026gt;y\u003c/code\u003e, or across a comment as in \u003ccode\u003ea{# c #}\u0026lt;img\u0026gt;\u003c/code\u003e). Whitespace is now kept where it renders and dropped where it does not.\u003c/li\u003e\n\u003cli\u003eA line break inside an attribute value is kept, so a \u003ccode\u003etitle\u003c/code\u003e tooltip no longer loses a line and a \u003ccode\u003edata-\u003c/code\u003e value read by script no longer comes back different. Line breaks in \u003ccode\u003eclass\u003c/code\u003e, \u003ccode\u003estyle\u003c/code\u003e, \u003ccode\u003esrcset\u003c/code\u003e and \u003ccode\u003esizes\u003c/code\u003e mean nothing and are still joined.\u003c/li\u003e\n\u003cli\u003eIndentation inside \u003ccode\u003e\u0026lt;pre\u0026gt;\u003c/code\u003e and \u003ccode\u003e\u0026lt;textarea\u0026gt;\u003c/code\u003e is left alone when the closing tag has something after it on its line (\u003ccode\u003e\u0026lt;pre\u0026gt;  a\\n  b\u0026lt;/pre\u0026gt; tail\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eWhitespace css does not collapse, such as U+2005, is text, and is no longer stripped from the edges of an element or of the file.\u003c/li\u003e\n\u003cli\u003eTwo indenting fixes: a line that closes one tag and opens another (\u003ccode\u003e\u0026lt;/b\u0026gt;\u0026lt;i\u0026gt;\u003c/code\u003e) indents its contents again, and a line that closes more tags than it opens unindents even when a whole tag ends it (\u003ccode\u003e\u0026lt;/b\u0026gt;\u0026lt;small\u0026gt;\u0026lt;/small\u0026gt;\u003c/code\u003e). Both left the lines after them at the wrong level.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--line-break-after-multiline-tag\u003c/code\u003e now applies only to tags actually written over several lines, as its help says. It was holding back the content of every element, splitting tags that fit on one line.\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003eclass\u003c/code\u003e value is tidied wherever it was written: \u003ccode\u003eclass=\u0026quot; a  b \u0026quot;\u003c/code\u003e becomes \u003ccode\u003eclass=\u0026quot;a b\u0026quot;\u003c/code\u003e. A tag whose attribute value holds a line break is spread over lines, since it cannot fit on one.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.44.0\u003c/h2\u003e\n\u003ch3\u003eFeature\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003e--allow-empty-input\u003c/code\u003e option, and the matching \u003ccode\u003eallow_empty_input\u003c/code\u003e config key, exits \u003ccode\u003e0\u003c/code\u003e instead o...\n\n_Description has been truncated_","html_url":"https://github.com/kathalsahab/expense_tracker/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/kathalsahab%2Fexpense_tracker/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"5219007183","node_id":"PR_kwDOT1AmwM8AAAABAnD5iQ","number":10,"state":"closed","title":"Bump the python group across 1 directory with 14 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-03T23:37:38.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T23:38:14.000Z","updated_at":"2026-09-03T23:37:40.000Z","time_to_close":1123164,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":14,"packages":[{"name":"django","old_version":"6.0.8","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"sentry-sdk","old_version":"2.66.1","new_version":"2.68.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"coverage","old_version":"7.15.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djlint","old_version":"1.43.2","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.1","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 14 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.8` | `6.1` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.66.1` | `2.68.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.3` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.43.2` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.1` | `0.16.3` |\n\n\nUpdates `django` from 6.0.8 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.8...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.66.1 to 2.68.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=True),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using it to gate usages of the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, you'll need to remove the calls entirely or define a \u003ccode\u003ebefore_send_log\u003c/code\u003e callback to filter out unwanted logs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you has \u003ccode\u003eenable_metrics\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAny metrics emitted using the metrics API will be emitted. You'll need to drop them in a \u003ccode\u003ebefore_send_metric\u003c/code\u003e or remove the calls to the API.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eWhy We're Doing This\u003c/h3\u003e\n\u003cp\u003eWe recognize this is a disruptive change for some folks and want to make it clear this is a one-off. We're removing the options because they were an unnecessary hurdle that one had to jump through to be able to use logs and metrics, and it was confusing why the logging API would not just work on its own. On the other hand, we wanted to give you more fine-grained control over automatic collection.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet the segment source on the scope for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7163\"\u003e#7163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove early return for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e in \u003ccode\u003eset_transaction_name()\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7164\"\u003e#7164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet the segment name on the scope with \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7162\"\u003e#7162\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(batcher) Add global flush trigger based on the span number by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7150\"\u003e#7150\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\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/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=True),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using it to gate usages of the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, you'll need to remove the calls entirely or define a \u003ccode\u003ebefore_send_log\u003c/code\u003e callback to filter out unwanted logs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you has \u003ccode\u003eenable_metrics\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAny metrics emitted using the metrics API will be emitted. You'll need to drop them in a \u003ccode\u003ebefore_send_metric\u003c/code\u003e or remove the calls to the API.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eWhy We're Doing This\u003c/h3\u003e\n\u003cp\u003eWe recognize this is a disruptive change for some folks and want to make it clear this is a one-off. We're removing the options because they were an unnecessary hurdle that one had to jump through to be able to use logs and metrics, and it was confusing why the logging API would not just work on its own. On the other hand, we wanted to give you more fine-grained control over automatic collection.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet the segment source on the scope for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7163\"\u003e#7163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove early return for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e in \u003ccode\u003eset_transaction_name()\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7164\"\u003e#7164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet the segment name on the scope with \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7162\"\u003e#7162\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(batcher) Add global flush trigger based on the span number by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7150\"\u003e#7150\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/getsentry/sentry-python/commit/c819e660c623b41b881349a7c7b3d9d2b94b157a\"\u003e\u003ccode\u003ec819e66\u003c/code\u003e\u003c/a\u003e Update README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/90446df489044416d92bb392cff17a8ddc863b01\"\u003e\u003ccode\u003e90446df\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/cb2499cf743298f8bbde0662e62f42d6a0c12514\"\u003e\u003ccode\u003ecb2499c\u003c/code\u003e\u003c/a\u003e release: 2.68.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/1c3b50d1cc5996249552b1808a77eeb3ad28e138\"\u003e\u003ccode\u003e1c3b50d\u003c/code\u003e\u003c/a\u003e ref: Flush trace buckets when segment spans finish (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7170\"\u003e#7170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/c200bdfb297dd83599f5fab5c693c463e7148e19\"\u003e\u003ccode\u003ec200bdf\u003c/code\u003e\u003c/a\u003e test(django): Remove dead code and stale markers from the Django test suite (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/4e4ea83b4fafaae3d53e68d756c55c74fee37545\"\u003e\u003ccode\u003e4e4ea83\u003c/code\u003e\u003c/a\u003e ref(boto3): Move crumbs to integration (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7165\"\u003e#7165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/0f0cd1fe65eeba9801077fd96dfe6e736dde11c2\"\u003e\u003ccode\u003e0f0cd1f\u003c/code\u003e\u003c/a\u003e ref(stdlib): Move crumbs to integration (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7161\"\u003e#7161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/2fef9bce3cd58d7f2993bb2d1c7169845e154c81\"\u003e\u003ccode\u003e2fef9bc\u003c/code\u003e\u003c/a\u003e chore: Make \u003ccode\u003eenable_logs\u003c/code\u003e, \u003ccode\u003eenable_metrics\u003c/code\u003e no-op (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7177\"\u003e#7177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/81777391339ed248a167f6e1aff1cb0df088cfc9\"\u003e\u003ccode\u003e8177739\u003c/code\u003e\u003c/a\u003e ref(httpx,httpx2): Move crumbs to integrations (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7149\"\u003e#7149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e4d7398fb7769c5853ad6ae9c80696192ce83982\"\u003e\u003ccode\u003ee4d7398\u003c/code\u003e\u003c/a\u003e ref(pyreqwest): Move crumbs to integration (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7148\"\u003e#7148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.66.1...2.68.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.3 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.3...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.7 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.7...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field\u003c/code\u003e corrupting concatenated keys (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/02a46831ceb213421761f312e1368fa7b7e796d9\"\u003e\u003ccode\u003e02a4683\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etestcase_databases\u003c/code\u003e mapping of \u003ccode\u003emulti_db = False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/bc85eb958b63b752cbd7454d6378e51ca50d891d\"\u003e\u003ccode\u003ebc85eb9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_decorators\u003c/code\u003e hoisting values above their definitions (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/4eb5abf3734ba10c96dd53abdf98e50c78c4adae\"\u003e\u003ccode\u003e4eb5abf\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_register\u003c/code\u003e referencing models defined after the admin class (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d782084a4fe43286d6b4b2d11676efad0a1356cb\"\u003e\u003ccode\u003ed782084\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003esettings_storages\u003c/code\u003e erasing settings referenced elsewhere (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/2f3eb7571f87ae8c62389ac8f977935f81fbe58e\"\u003e\u003ccode\u003e2f3eb75\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etest_http_headers\u003c/code\u003e precedence when merging into \u003ccode\u003eheaders=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d750615a98098ff0c44477041932a04089d5aa47\"\u003e\u003ccode\u003ed750615\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003estringagg\u003c/code\u003e moving import despite bare \u003ccode\u003eStringAgg\u003c/code\u003e references (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/49cb8b9c2297d329a8f858beb54fb34e7274830a\"\u003e\u003ccode\u003e49cb8b9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eutils_timezone\u003c/code\u003e matching aliased \u003ccode\u003eutc\u003c/code\u003e imports (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-upgrade/compare/1.31.1...1.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djlint` from 1.43.2 to 1.44.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/djlint/djLint/releases\"\u003edjlint's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.44.2\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eH037\u003c/code\u003e no longer reports two attributes whose names differ only before a \u003ccode\u003e.\u003c/code\u003e as duplicates (\u003ccode\u003edata-a.checked\u003c/code\u003e and \u003ccode\u003edata-b.checked\u003c/code\u003e, or alpine's \u003ccode\u003ex-on:click.prevent\u003c/code\u003e and \u003ccode\u003ex-on:keyup.prevent\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAn attribute whose name merely ends in the name a rule looks for is no longer mistaken for it. \u003ccode\u003edata-alt\u003c/code\u003e and \u003ccode\u003edata-x.alt\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent on an image with no \u003ccode\u003ealt\u003c/code\u003e, \u003ccode\u003edata-lang\u003c/code\u003e and \u003ccode\u003exml:lang\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, \u003ccode\u003edata-height\u003c/code\u003e and \u003ccode\u003edata-width\u003c/code\u003e silenced \u003ccode\u003eH006\u003c/code\u003e, \u003ccode\u003edata-name=\u0026quot;description\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH030\u003c/code\u003e and \u003ccode\u003edata-name=\u0026quot;keywords\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH031\u003c/code\u003e, and \u003ccode\u003edata-x.id\u003c/code\u003e satisfied a \u003ccode\u003e\u0026lt;label for\u0026gt;\u003c/code\u003e for \u003ccode\u003eH042\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eA name written inside an attribute value is no longer read as an attribute. \u003ccode\u003etitle=\u0026quot;alt=x\u0026quot;\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent, \u003ccode\u003eclass=\u0026quot;language-en\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, and \u003ccode\u003etitle=\u0026quot;the ID=5\u0026quot;\u003c/code\u003e was reported by \u003ccode\u003eH010\u003c/code\u003e as an uppercase attribute name.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eH005\u003c/code\u003e no longer reports a tag whose name only starts with \u003ccode\u003ehtml\u003c/code\u003e, such as \u003ccode\u003e\u0026lt;htmlx\u0026gt;\u003c/code\u003e, and points at the \u003ccode\u003e\u0026lt;html\u0026gt;\u003c/code\u003e tag itself rather than at everything up to the last \u003ccode\u003e\u0026gt;\u003c/code\u003e in the file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.44.1\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFormatting no longer changes what the page renders. A space that shows was dropped (\u003ccode\u003e\u0026lt;span\u0026gt;a\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt; b \u0026lt;/span\u0026gt;\u003c/code\u003e rendered as \u003ccode\u003eab\u003c/code\u003e, \u003ccode\u003ea{% if x %} b {% endif %}c\u003c/code\u003e as \u003ccode\u003eabc\u003c/code\u003e), a space that shows nothing was added (\u003ccode\u003e\u0026lt;span\u0026gt;     \u0026lt;/span\u0026gt;\u003c/code\u003e became \u003ccode\u003e\u0026lt;span\u0026gt; \u0026lt;/span\u0026gt;\u003c/code\u003e), and moving a tag onto its own line could add one (\u003ccode\u003ex\u0026lt;img\u0026gt;y\u003c/code\u003e, or across a comment as in \u003ccode\u003ea{# c #}\u0026lt;img\u0026gt;\u003c/code\u003e). Whitespace is now kept where it renders and dropped where it does not.\u003c/li\u003e\n\u003cli\u003eA line break inside an attribute value is kept, so a \u003ccode\u003etitle\u003c/code\u003e tooltip no longer loses a line and a \u003ccode\u003edata-\u003c/code\u003e value read by script no longer comes back different. Line breaks in \u003ccode\u003eclass\u003c/code\u003e, \u003ccode\u003estyle\u003c/code\u003e, \u003ccode\u003esrcset\u003c/code\u003e and \u003ccode\u003esizes\u003c/code\u003e mean nothing and are still joined.\u003c/li\u003e\n\u003cli\u003eIndentation inside \u003ccode\u003e\u0026lt;pre\u0026gt;\u003c/code\u003e and \u003ccode\u003e\u0026lt;textarea\u0026gt;\u003c/code\u003e is left alone when the closing tag has something after it on its line (\u003ccode\u003e\u0026lt;pre\u0026gt;  a\\n  b\u0026lt;/pre\u0026gt; tail\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eWhitespace css does not collapse, such as U+2005, is text, and is no longer stripped from the edges of an element or of the file.\u003c/li\u003e\n\u003cli\u003eTwo indenting fixes: a line that closes one tag and opens another (\u003ccode\u003e\u0026lt;/b\u0026gt;\u0026lt;i\u0026gt;\u003c/code\u003e) indents its contents again, and a line that closes more tags than it opens unindents even when a whole tag ends it (\u003ccode\u003e\u0026lt;/b\u0026gt;\u0026lt;small\u0026gt;\u0026lt;/small\u0026gt;\u003c/code\u003e). Both left the lines after them at the wrong level.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--line-break-after-multiline-tag\u003c/code\u003e now applies only to tags actually written over several lines, as its help says. It was holding back the content of every element, splitting tags that fit on one line.\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003eclass\u003c/code\u003e value is tidied wherever it was written: \u003ccode\u003eclass=\u0026quot; a  b \u0026quot;\u003c/code\u003e becomes \u003ccode\u003eclass=\u0026quot;a b\u0026quot;\u003c/code\u003e. A tag whose attribute value holds a line break is spread over lines, since it cannot fit on one.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.44.0\u003c/h2\u003e\n\u003ch3\u003eFeature\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003e--allow-empty-input\u003c/code\u003e option, and the matching \u003ccode\u003eallow_empty_input\u003c/code\u003e config key, exits \u003ccode\u003e0\u003c/code\u003e instead of \u003ccode\u003e2\u003c/code\u003e when the given paths match no files.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAn html close tag inside an inline \u003ccode\u003e{% if %}...{% endif %}\u003c/code\u003e no longer dedents everything that follows it by one level, collapsing nested structures toward column 0 - a regression in 1.43.0. A close tag already at the content level of the template block it sits in is held there, but the level it was denied was then taken off the end of the line instead, so \u003ccode\u003e{% if r %}\u0026lt;/strong\u0026gt;{% endif %}\u003c/code\u003e moved the rest of the block left. The matching open tag never took a level to give back, since \u003ccode\u003e{% endif %}\u003c/code\u003e had already returned it.\u003c/li\u003e\n\u003cli\u003eA run where every file found was skipped by \u003ccode\u003eexclude\u003c/code\u003e, \u003ccode\u003eextend_exclude\u003c/code\u003e, \u003ccode\u003euse_gitignore\u003c/code\u003e or \u003ccode\u003erequire_pragma\u003c/code\u003e now exits \u003ccode\u003e0\u003c/code\u003e instead of \u003ccode\u003e1\u003c/code\u003e. Skipping them is the configuration doing its job, and it is what lets \u003ccode\u003eexclude\u003c/code\u003e work under pre-commit, which passes the names of every staged file. Paths that match no files at all now exit \u003ccode\u003e2\u003c/code\u003e rather than \u003ccode\u003e1\u003c/code\u003e, so exit \u003ccode\u003e1\u003c/code\u003e means only that djLint found something to report.\u003c/li\u003e\n\u003cli\u003eAn unhandled error exits \u003ccode\u003e2\u003c/code\u003e instead of \u003ccode\u003e1\u003c/code\u003e, so a crash is no longer indistinguishable from a lint error. The traceback is still printed.\u003c/li\u003e\n\u003cli\u003eAn unrecognized \u003ccode\u003e--profile\u003c/code\u003e, or \u003ccode\u003eprofile\u003c/code\u003e in a config file, is now a usage error. A typo used to lint with a silently different rule set and exit \u003ccode\u003e0\u003c/code\u003e, and raised \u003ccode\u003eKeyError\u003c/code\u003e with \u003ccode\u003e--require-pragma\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eA directory whose name matches the file extension (\u003ccode\u003ebuild.html/\u003c/code\u003e) is no longer picked up as a template and opened as a file, crashing the run.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eNo files to check!\u003c/code\u003e is written to stderr instead of stdout, where formatted code is written.\u003c/li\u003e\n\u003cli\u003eInput piped to \u003ccode\u003edjlint - --reformat\u003c/code\u003e that \u003ccode\u003e--require-pragma\u003c/code\u003e skips is handed back byte for byte instead of being replaced by \u003ccode\u003eNo files to check!\u003c/code\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/djlint/djLint/blob/master/CHANGELOG.md\"\u003edjlint's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.44.2] - 2026-08-08\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eH037\u003c/code\u003e no longer reports two attributes whose names differ only before a \u003ccode\u003e.\u003c/code\u003e as duplicates (\u003ccode\u003edata-a.checked\u003c/code\u003e and \u003ccode\u003edata-b.checked\u003c/code\u003e, or alpine's \u003ccode\u003ex-on:click.prevent\u003c/code\u003e and \u003ccode\u003ex-on:keyup.prevent\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAn attribute whose name merely ends in the name a rule looks for is no longer mistaken for it. \u003ccode\u003edata-alt\u003c/code\u003e and \u003ccode\u003edata-x.alt\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent on an image with no \u003ccode\u003ealt\u003c/code\u003e, \u003ccode\u003edata-lang\u003c/code\u003e and \u003ccode\u003exml:lang\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, \u003ccode\u003edata-height\u003c/code\u003e and \u003ccode\u003edata-width\u003c/code\u003e silenced \u003ccode\u003eH006\u003c/code\u003e, \u003ccode\u003edata-name=\u0026quot;description\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH030\u003c/code\u003e and \u003ccode\u003edata-name=\u0026quot;keywords\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH031\u003c/code\u003e, and \u003ccode\u003edata-x.id\u003c/code\u003e satisfied a \u003ccode\u003e\u0026lt;label for\u0026gt;\u003c/code\u003e for \u003ccode\u003eH042\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eA name written inside an attribute value is no longer read as an attribute. \u003ccode\u003etitle=\u0026quot;alt=x\u0026quot;\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent, \u003ccode\u003eclass=\u0026quot;language-en\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, and \u003ccode\u003etitle=\u0026quot;the ID=5\u0026quot;\u003c/code\u003e was reported by \u003ccode\u003eH010\u003c/code\u003e as an uppercase attribute name.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eH005\u003c/code\u003e no longer reports a tag whose name only starts with \u003ccode\u003ehtml\u003c/code\u003e, such as \u003ccode\u003e\u0026lt;htmlx\u0026gt;\u003c/code\u003e, and points at the \u003ccode\u003e\u0026lt;html\u0026gt;\u003c/code\u003e tag itself rather than at everything up to the last \u003ccode\u003e\u0026gt;\u003c/code\u003e in the file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.44.1] - 2026-08-07\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFormatting no longer changes what the page renders. A space that shows was dropped (\u003ccode\u003e\u0026lt;span\u0026gt;a\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt; b \u0026lt;/span\u0026gt;\u003c/code\u003e rendered as \u003ccode\u003eab\u003c/code\u003e, \u003ccode\u003ea{% if x %} b {% endif %}c\u003c/code\u003e as \u003ccode\u003eabc\u003c/code\u003e), a space that shows nothing was added (\u003ccode\u003e\u0026lt;span\u0026gt;     \u0026lt;/span\u0026gt;\u003c/code\u003e became \u003ccode\u003e\u0026lt;span\u0026gt; \u0026lt;/span\u0026gt;\u003c/code\u003e), and moving a tag onto its own line could add one (\u003ccode\u003ex\u0026lt;img\u0026gt;y\u003c/code\u003e, or across a comment as in \u003ccode\u003ea{# c #}\u0026lt;img\u0026gt;\u003c/code\u003e). Whitespace is now kept where it renders and dropped where it does not.\u003c/li\u003e\n\u003cli\u003eA line break inside an attribute value is kept, so a \u003ccode\u003etitle\u003c/code\u003e tooltip no longer loses a line and a \u003ccode\u003edata-\u003c/code\u003e value read by script no longer comes back different. Line breaks in \u003ccode\u003eclass\u003c/code\u003e, \u003ccode\u003estyle\u003c/code\u003e, \u003ccode\u003esrcset\u003c/code\u003e and \u003ccode\u003esizes\u003c/code\u003e mean nothing and are still joined.\u003c/li\u003e\n\u003cli\u003eIndentation inside \u003ccode\u003e\u0026lt;pre\u0026gt;\u003c/code\u003e and \u003ccode\u003e\u0026lt;textarea\u0026gt;\u003c/code\u003e is left alone when the closing tag has something after it on its line (\u003ccode\u003e\u0026lt;pre\u0026gt;  a\\n  b\u0026lt;/pre\u0026gt; tail\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eWhitespace css does not collapse, such as U+2005, is text, and is no longer stripped from the edges of an element or of the file.\u003c/li\u003e\n\u003cli\u003eTwo indenting fixes: a line that closes one tag and opens another (\u003ccode\u003e\u0026lt;/b\u0026gt;\u0026lt;i\u0026gt;\u003c/code\u003e) indents its contents again, and a line that closes more tags than it opens unindents even when a whole tag ends it (\u003ccode\u003e\u0026lt;/b\u0026gt;\u0026lt;small\u0026gt;\u0026lt;/small\u0026gt;\u003c/code\u003e). Both left the lines after them at the wrong level.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--line-break-after-multiline-tag\u003c/code\u003e now applies only to tags actually written over several lines, as its help says. It was holding back the content of every element, splitting tags that fit on one line.\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003eclass\u003c/code\u003e value is tidied wherever it was written: \u003ccode\u003eclass=\u0026quot; a  b \u0026quot;\u003c/code\u003e becomes \u003ccode\u003eclass=\u0026quot;a b\u0026quot;\u003c/code\u003e. A tag whose attribute value holds a line break is spread over lines, since it cannot fit on one.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.44.0] - 2026-08-04\u003c/h2\u003e\n\u003ch3\u003eFeature\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003e--allow-empty-input\u003c/code\u003e option, and the matching \u003ccode\u003eallow_empty_input\u003c/code\u003e config key, exits \u003ccode\u003e0\u003c/code\u003e instead of \u003ccode\u003e2\u003c/code\u003e when the given paths match no files.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAn html close tag inside an inline \u003ccode\u003e{% if %}...{% endif %}\u003c/code\u003e no longer dedents everything that follows it by one level, collapsing nested structures toward column 0 - a regression in 1.43.0. A close tag already at the content level of the template block it sits in is held there, but the level it was denied was then taken off the end of the line instead, so \u003ccode\u003e{% if r %}\u0026lt;/strong\u0026gt;{% endif %}\u003c/code\u003e moved the rest of the block left. The matching open tag never took a level to give back, since \u003ccode\u003e{% endif %}\u003c/code\u003e had already returned it.\u003c/li\u003e\n\u003cli\u003eA run where every file found was skipped by \u003ccode\u003eexclude\u003c/code\u003e, \u003ccode\u003eextend_exclude\u003c/code\u003e, \u003ccode\u003euse_gitignore\u003c/code\u003e or \u003ccode\u003erequire_pragma\u003c/code\u003e now exits \u003ccode\u003e0\u003c/code\u003e instead of \u003ccode\u003e1\u003c/code\u003e. Skipping them is the configuration doing its job, and it is what lets \u003ccode\u003eexclude\u003c/code\u003e work under pre-commit, which passes the names of every staged file. Paths that match no files at all now exit \u003ccode\u003e2\u003c/code\u003e rather than \u003ccode\u003e1\u003c/code\u003e, so exit \u003ccode\u003e1\u003c/code\u003e means only that djLint found something to report.\u003c/li\u003e\n\u003cli\u003eAn unhandled error exits \u003ccode\u003e2\u003c/code\u003e instead of \u003ccode\u003e1\u003c/code\u003e, so a crash is no longer indistinguishable from a lint error. The traceback is still printed.\u003c/li\u003e\n\u003cli\u003eAn unrecognized \u003ccode\u003e--profile\u003c/code\u003e, or \u003ccode\u003eprofile\u003c/code\u003e in a config file, is now a usage error. A typo used to lint with a silently different rule set and exit \u003ccode\u003e0\u003c/code\u003e, and raised \u003ccode\u003eKeyError\u003c/code\u003e with \u003ccode\u003e--require-pragma\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eA directory whose name matches the file extension (\u003ccode\u003ebuild.html/\u003c/code\u003e) is no longer picked up as a template and opened as a file, crashing the run.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eNo files to check!\u003c/code\u003e is written to stderr instead of stdout, where formatted code is written.\u003c/li\u003e\n\u003cli\u003eInput piped to \u003ccode\u003edjlint - --reformat\u003c/code\u003e that \u003ccode\u003e--require-pragma\u003c/code\u003e skips is handed back byte for byte instead of being replaced by \u003ccode\u003eNo files to check!\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/djlint/djLint/commit/76675b68608b5643655650bf461b7d2abb2e2a52\"\u003e\u003ccode\u003e76675b6\u003c/code\u003e\u003c/a\u003e v1.44.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/djlint/djLint/commit/c6016b29a84db3780c06af1badeeca50ac4147d4\"\u003e\u003ccode\u003ec6016b2\u003c/code\u003e\u003c/a\u003e fix(linter): don't read an attribute name from the middle in H037\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/djlint/djLint/commit/9de6448dc82cadcf56c21f05d4d5a99ab507445f\"\u003e\u003ccode\u003e9de6448\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/djlint/djLint/issues/2351\"\u003e#2351\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/djlint/djLint/commit/e7d505623042316be63009080d6222ea78b8943c\"\u003e\u003ccode\u003ee7d5056\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency cssnano to v8.0.3 (\u003ca href=\"https://redirect.githu...\n\n_Description has been truncated_","html_url":"https://github.com/binittasaji2003-dot/HMS/pull/10","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/binittasaji2003-dot%2FHMS/issues/10","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/10/packages"},{"uuid":"5218374863","node_id":"PR_kwDOTZlw5c8AAAABAmkJ8A","number":23,"state":"closed","title":"Bump the python group across 1 directory with 19 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T21:40:01.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T21:38:05.000Z","updated_at":"2026-09-04T21:40:03.000Z","time_to_close":1209716,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":19,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"sentry-sdk","old_version":"2.64.0","new_version":"2.68.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"strawberry-graphql-django","old_version":"0.86.4","new_version":"0.87.0","repository_url":"https://github.com/strawberry-graphql/strawberry-django"},{"name":"uvicorn","old_version":"0.49.0","new_version":"0.52.3"},{"name":"coverage","old_version":"7.14.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0"},{"name":"djlint","old_version":"1.40.1","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.20","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 19 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail[brevo]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.64.0` | `2.68.0` |\n| [strawberry-graphql-django](https://github.com/strawberry-graphql/strawberry-django) | `0.86.4` | `0.87.0` |\n| [uvicorn[standard]](https://github.com/Kludex/uvicorn) | `0.49.0` | `0.52.3` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.3` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.40.1` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.16.3` |\n\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[brevo]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[brevo]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[brevo]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.64.0 to 2.68.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=True),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using it to gate usages of the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, you'll need to remove the calls entirely or define a \u003ccode\u003ebefore_send_log\u003c/code\u003e callback to filter out unwanted logs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you has \u003ccode\u003eenable_metrics\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAny metrics emitted using the metrics API will be emitted. You'll need to drop them in a \u003ccode\u003ebefore_send_metric\u003c/code\u003e or remove the calls to the API.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eWhy We're Doing This\u003c/h3\u003e\n\u003cp\u003eWe recognize this is a disruptive change for some folks and want to make it clear this is a one-off. We're removing the options because they were an unnecessary hurdle that one had to jump through to be able to use logs and metrics, and it was confusing why the logging API would not just work on its own. On the other hand, we wanted to give you more fine-grained control over automatic collection.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet the segment source on the scope for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7163\"\u003e#7163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove early return for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e in \u003ccode\u003eset_transaction_name()\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7164\"\u003e#7164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet the segment name on the scope with \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7162\"\u003e#7162\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(batcher) Add global flush trigger based on the span number by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7150\"\u003e#7150\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\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/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=True),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using it to gate usages of the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, you'll need to remove the calls entirely or define a \u003ccode\u003ebefore_send_log\u003c/code\u003e callback to filter out unwanted logs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you has \u003ccode\u003eenable_metrics\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAny metrics emitted using the metrics API will be emitted. You'll need to drop them in a \u003ccode\u003ebefore_send_metric\u003c/code\u003e or remove the calls to the API.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eWhy We're Doing This\u003c/h3\u003e\n\u003cp\u003eWe recognize this is a disruptive change for some folks and want to make it clear this is a one-off. We're removing the options because they were an unnecessary hurdle that one had to jump through to be able to use logs and metrics, and it was confusing why the logging API would not just work on its own. On the other hand, we wanted to give you more fine-grained control over automatic collection.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet the segment source on the scope for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7163\"\u003e#7163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove early return for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e in \u003ccode\u003eset_transaction_name()\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7164\"\u003e#7164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet the segment name on the scope with \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7162\"\u003e#7162\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(batcher) Add global flush trigger based on the span number by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7150\"\u003e#7150\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/getsentry/sentry-python/commit/c819e660c623b41b881349a7c7b3d9d2b94b157a\"\u003e\u003ccode\u003ec819e66\u003c/code\u003e\u003c/a\u003e Update README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/90446df489044416d92bb392cff17a8ddc863b01\"\u003e\u003ccode\u003e90446df\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/cb2499cf743298f8bbde0662e62f42d6a0c12514\"\u003e\u003ccode\u003ecb2499c\u003c/code\u003e\u003c/a\u003e release: 2.68.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/1c3b50d1cc5996249552b1808a77eeb3ad28e138\"\u003e\u003ccode\u003e1c3b50d\u003c/code\u003e\u003c/a\u003e ref: Flush trace buckets when segment spans finish (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7170\"\u003e#7170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/c200bdfb297dd83599f5fab5c693c463e7148e19\"\u003e\u003ccode\u003ec200bdf\u003c/code\u003e\u003c/a\u003e test(django): Remove dead code and stale markers from the Django test suite (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/4e4ea83b4fafaae3d53e68d756c55c74fee37545\"\u003e\u003ccode\u003e4e4ea83\u003c/code\u003e\u003c/a\u003e ref(boto3): Move crumbs to integration (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7165\"\u003e#7165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/0f0cd1fe65eeba9801077fd96dfe6e736dde11c2\"\u003e\u003ccode\u003e0f0cd1f\u003c/code\u003e\u003c/a\u003e ref(stdlib): Move crumbs to integration (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7161\"\u003e#7161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/2fef9bce3cd58d7f2993bb2d1c7169845e154c81\"\u003e\u003ccode\u003e2fef9bc\u003c/code\u003e\u003c/a\u003e chore: Make \u003ccode\u003eenable_logs\u003c/code\u003e, \u003ccode\u003eenable_metrics\u003c/code\u003e no-op (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7177\"\u003e#7177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/81777391339ed248a167f6e1aff1cb0df088cfc9\"\u003e\u003ccode\u003e8177739\u003c/code\u003e\u003c/a\u003e ref(httpx,httpx2): Move crumbs to integrations (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7149\"\u003e#7149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e4d7398fb7769c5853ad6ae9c80696192ce83982\"\u003e\u003ccode\u003ee4d7398\u003c/code\u003e\u003c/a\u003e ref(pyreqwest): Move crumbs to integration (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7148\"\u003e#7148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.64.0...2.68.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `strawberry-graphql-django` from 0.86.4 to 0.87.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/releases\"\u003estrawberry-graphql-django's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.87.0\u003c/h2\u003e\n\u003cp\u003eResolve prefetch-optimized nested connections on the event loop instead of\npaying a \u003ccode\u003esync_to_async\u003c/code\u003e thread hop per parent node: the nested-connection\ndefault resolver, the queryset hook for prefetch-optimized querysets and\n\u003ccode\u003etotalCount\u003c/code\u003e served from the prefetched window annotation no longer touch\nthe database, so they no longer need a worker thread.\u003c/p\u003e\n\u003cp\u003eThis release was contributed by \u003ca href=\"https://github.com/rcybulski1122012\"\u003e\u003ccode\u003e@​rcybulski1122012\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/pull/932\"\u003estrawberry-graphql/strawberry-django#932\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAdditional contributors: \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.86.8\u003c/h2\u003e\n\u003cp\u003eThe built-in toolbar script is now compatible with django-debug-toolbar 7.0.0,\nwhich renders the toolbar inside a shadow DOM by default.\u003c/p\u003e\n\u003cp\u003ePreviously, all DOM queries targeted \u003ccode\u003e#djDebug\u003c/code\u003e directly on the document,\nwhich broke under shadow DOM isolation — \u003ccode\u003equerySelector\u003c/code\u003e cannot pierce a shadow\nboundary.\u003c/p\u003e\n\u003cp\u003eUsing a \u003ccode\u003egetDebugElement()\u003c/code\u003e helper that locates \u003ccode\u003e#djDebug\u003c/code\u003e via\nthe shadow root of its parent element (\u003ccode\u003e#djDebugRoot\u003c/code\u003e):\u003c/p\u003e\n\u003cpre lang=\"js\"\u003e\u003ccode\u003efunction getDebugElement() {\n  const root = document.getElementById(\u0026quot;djDebugRoot\u0026quot;);\n  if (root) {\n    return (root.shadowRoot || root).querySelector(\u0026quot;#djDebug\u0026quot;);\n  }\n  return document.getElementById(\u0026quot;djDebug\u0026quot;);\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThis also handles the \u003ccode\u003eUSE_SHADOW_DOM = False\u003c/code\u003e fallback gracefully, keeping\nbackward compatibility with older versions of the toolbar.\u003c/p\u003e\n\u003cp\u003eThis release was contributed by \u003ca href=\"https://github.com/daudln\"\u003e\u003ccode\u003e@​daudln\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/pull/926\"\u003estrawberry-graphql/strawberry-django#926\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAdditional contributors: \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/bellini666\"\u003e\u003ccode\u003e@​bellini666\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.86.7\u003c/h2\u003e\n\u003cp\u003eHonor the \u003ccode\u003eDEFAULT_PK_FIELD_NAME\u003c/code\u003e setting (and per-field \u003ccode\u003ekey_attr\u003c/code\u003e) when\nresolving existing instances in mutation inputs. Previously \u003ccode\u003e_parse_pk\u003c/code\u003e read the\ninput value under \u003ccode\u003ekey_attr\u003c/code\u003e but always looked the instance up by \u003ccode\u003epk=\u003c/code\u003e, so\nrelation inputs and bare-id updates that reference an object by a configured\nnon-pk field raised \u003ccode\u003eDoesNotExist\u003c/code\u003e or matched the wrong row. Filters already\nhonored the setting; mutations now do too. The default \u003ccode\u003epk\u003c/code\u003e-based path is\nunchanged.\u003c/p\u003e\n\u003cp\u003eThis release was contributed by \u003ca href=\"https://github.com/ayushin\"\u003e\u003ccode\u003e@​ayushin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/pull/928\"\u003estrawberry-graphql/strawberry-django#928\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/blob/main/CHANGELOG.md\"\u003estrawberry-graphql-django's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.87.0 - 2026-08-06\u003c/h2\u003e\n\u003cp\u003eResolve prefetch-optimized nested connections on the event loop instead of\npaying a \u003ccode\u003esync_to_async\u003c/code\u003e thread hop per parent node: the nested-connection\ndefault resolver, the queryset hook for prefetch-optimized querysets and\n\u003ccode\u003etotalCount\u003c/code\u003e served from the prefetched window annotation no longer touch\nthe database, so they no longer need a worker thread.\u003c/p\u003e\n\u003cp\u003eThis release was contributed by \u003ca href=\"https://github.com/rcybulski1122012\"\u003e\u003ccode\u003e@​rcybulski1122012\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/pull/932\"\u003e#932\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAdditional contributors: \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.86.8 - 2026-08-01\u003c/h2\u003e\n\u003cp\u003eThe built-in toolbar script is now compatible with django-debug-toolbar 7.0.0,\nwhich renders the toolbar inside a shadow DOM by default.\u003c/p\u003e\n\u003cp\u003ePreviously, all DOM queries targeted \u003ccode\u003e#djDebug\u003c/code\u003e directly on the document,\nwhich broke under shadow DOM isolation — \u003ccode\u003equerySelector\u003c/code\u003e cannot pierce a shadow\nboundary.\u003c/p\u003e\n\u003cp\u003eUsing a \u003ccode\u003egetDebugElement()\u003c/code\u003e helper that locates \u003ccode\u003e#djDebug\u003c/code\u003e via\nthe shadow root of its parent element (\u003ccode\u003e#djDebugRoot\u003c/code\u003e):\u003c/p\u003e\n\u003cpre lang=\"js\"\u003e\u003ccode\u003efunction getDebugElement() {\n  const root = document.getElementById(\u0026quot;djDebugRoot\u0026quot;);\n  if (root) {\n    return (root.shadowRoot || root).querySelector(\u0026quot;#djDebug\u0026quot;);\n  }\n  return document.getElementById(\u0026quot;djDebug\u0026quot;);\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThis also handles the \u003ccode\u003eUSE_SHADOW_DOM = False\u003c/code\u003e fallback gracefully, keeping\nbackward compatibility with older versions of the toolbar.\u003c/p\u003e\n\u003cp\u003eThis release was contributed by \u003ca href=\"https://github.com/daudln\"\u003e\u003ccode\u003e@​daudln\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/pull/926\"\u003e#926\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAdditional contributors: \u003ca href=\"https://github.com/bellini666\"\u003e\u003ccode\u003e@​bellini666\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/pre-commit-ci%5Bbot%5D\"\u003e\u003ccode\u003e@​pre-commit-ci[bot]\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.86.7 - 2026-08-01\u003c/h2\u003e\n\u003cp\u003eHonor the \u003ccode\u003eDEFAULT_PK_FIELD_NAME\u003c/code\u003e setting (and per-field \u003ccode\u003ekey_attr\u003c/code\u003e) when\nresolving existing instances in mutation inputs. Previously \u003ccode\u003e_parse_pk\u003c/code\u003e read the\ninput value under \u003ccode\u003ekey_attr\u003c/code\u003e but always looked the instance up by \u003ccode\u003epk=\u003c/code\u003e, so\nrelation inputs and bare-id updates that reference an object by a configured\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/strawberry-graphql/strawberry-django/commit/1513927efbf34956503f359cd32136d5b14484ad\"\u003e\u003ccode\u003e1513927\u003c/code\u003e\u003c/a\u003e perf: resolve prefetch-optimized nested connections without per-node thread h...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/dbda2cef042205a4f3e7b1f6e39167a02c97c962\"\u003e\u003ccode\u003edbda2ce\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/issues/940\"\u003e#940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/23eb6c6e6a53897ddafe8c914e28049fc0e80bf7\"\u003e\u003ccode\u003e23eb6c6\u003c/code\u003e\u003c/a\u003e 🤖 Release 0.86.8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/3d3648702e4d2f27408a55acf5018631dba5be19\"\u003e\u003ccode\u003e3d36487\u003c/code\u003e\u003c/a\u003e fix: update toolbar script for django-debug-toolbar 7.0.0 shadow DOM … (\u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/issues/926\"\u003e#926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/e47bda41ad89409e013828ece1a8a8cf712afb03\"\u003e\u003ccode\u003ee47bda4\u003c/code\u003e\u003c/a\u003e ci: allow autopub release check to run on fork PRs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/738ffbd38d240d7dcec508765607478212a212b9\"\u003e\u003ccode\u003e738ffbd\u003c/code\u003e\u003c/a\u003e 🤖 Release 0.86.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/d8805243d834e96fb4841ee54056c9755709b2b3\"\u003e\u003ccode\u003ed880524\u003c/code\u003e\u003c/a\u003e fix: honor DEFAULT_PK_FIELD_NAME in mutation instance lookups (\u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/issues/928\"\u003e#928\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/98aa78761a21580e6c7d97daec2356d200d9d1c4\"\u003e\u003ccode\u003e98aa787\u003c/code\u003e\u003c/a\u003e 🤖 Release 0.86.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/5841442d28b45287d7bf5f2d478b8fd465a4cb2e\"\u003e\u003ccode\u003e5841442\u003c/code\u003e\u003c/a\u003e fix: skip the per-parent COUNT for totalCount of empty prefetched nested conn...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/e948384bdf5c21f2d0e4b567679e59deaecaad01\"\u003e\u003ccode\u003ee948384\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/issues/937\"\u003e#937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/compare/0.86.4...0.87.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn[standard]` from 0.49.0 to 0.52.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn[standard]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\u003c/a\u003e\u003c/p...\n\n_Description has been truncated_","html_url":"https://github.com/mrchego/rbac/pull/23","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrchego%2Frbac/issues/23","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/23/packages"},{"uuid":"5218319400","node_id":"PR_kwDOBNg-c88AAAABAmhXdQ","number":208,"state":"closed","title":"Bump the python group across 1 directory with 17 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T21:26:18.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T21:28:29.000Z","updated_at":"2026-09-04T21:26:20.000Z","time_to_close":1209469,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":17,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"django-ninja","old_version":"1.6.2","new_version":"1.6.3","repository_url":"https://github.com/vitalik/django-ninja"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.70.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"uvicorn","old_version":"0.49.0","new_version":"0.52.3"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0"},{"name":"djlint","old_version":"1.40.2","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.20","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 17 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail[mailgun]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [django-ninja](https://github.com/vitalik/django-ninja) | `1.6.2` | `1.6.3` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.70.0` |\n| [uvicorn[standard]](https://github.com/Kludex/uvicorn) | `0.49.0` | `0.52.3` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.40.2` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.16.3` |\n\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[mailgun]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[mailgun]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[mailgun]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-ninja` from 1.6.2 to 1.6.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/vitalik/django-ninja/releases\"\u003edjango-ninja's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.6.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Django upper version constraint by \u003ca href=\"https://github.com/Stormheg\"\u003e\u003ccode\u003e@​Stormheg\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vitalik/django-ninja/pull/1749\"\u003evitalik/django-ninja#1749\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate packaging metadata to PEP 621 for Flit 4 compatibility (with \u003ca href=\"https://github.com/LexGlu\"\u003e\u003ccode\u003e@​LexGlu\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/vitalik/django-ninja/pull/1753\"\u003evitalik/django-ninja#1753\u003c/a\u003e) in \u003ca href=\"https://redirect.github.com/vitalik/django-ninja/pull/1762\"\u003evitalik/django-ninja#1762\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eHotfix release cut from v1.6.2 — contains only the changes above, none of the other work currently on master.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/vitalik/django-ninja/compare/v1.6.2...v1.6.3\"\u003ehttps://github.com/vitalik/django-ninja/compare/v1.6.2...v1.6.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vitalik/django-ninja/commit/4086c9b36a72aa8e47ef882162a478a017841c0d\"\u003e\u003ccode\u003e4086c9b\u003c/code\u003e\u003c/a\u003e Bump version to 1.6.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vitalik/django-ninja/commit/1229ff928f78be2fd456bcb1b5afaf1eabf8e195\"\u003e\u003ccode\u003e1229ff9\u003c/code\u003e\u003c/a\u003e Migrate pyproject.toml to PEP 621 [project] metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vitalik/django-ninja/commit/9798e0a24b86ab0f5c0422861d4803fff1ccfa91\"\u003e\u003ccode\u003e9798e0a\u003c/code\u003e\u003c/a\u003e Drop Django upper version constraint\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/vitalik/django-ninja/compare/v1.6.2...v1.6.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tqdm` from 4.68.3 to 4.70.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tqdm/tqdm/releases\"\u003etqdm's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003etqdm v4.70.0 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003econtrib.concurrent\u003c/code\u003e: major improvements\n\u003cul\u003e\n\u003cli\u003esupport \u003ccode\u003eprocess_map(mp_context, max_tasks_per_child)\u003c/code\u003e, \u003ccode\u003ethread_map(thread_name_prefix)\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1265\"\u003e#1265\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003etotal\u003c/code\u003e based on shortest iterable length (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1473\"\u003e#1473\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euse default \u003ccode\u003emax_workers\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1543\"\u003e#1543\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1530\"\u003e#1530\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1518\"\u003e#1518\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esupport \u003ccode\u003etimeout\u003c/code\u003e, \u003ccode\u003ebuffersize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1576\"\u003e#1576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove ETA (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1708\"\u003e#1708\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1161\"\u003e#1161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate \u003ccode\u003eas_completed\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1709\"\u003e#1709\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1565\"\u003e#1565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd \u003ccode\u003etqdm.concurrent.intepreter_map\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1777\"\u003e#1777\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003easyncio\u003c/code\u003e: support iterables with only \u003ccode\u003e__aiter__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1714\"\u003e#1714\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1686\"\u003e#1686\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esupport \u003ccode\u003ereset(float(\u0026quot;inf\u0026quot;))\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1783\"\u003e#1783\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1781\"\u003e#1781\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/651\"\u003e#651\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eframework: test \u0026amp; reduce wheel size (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1782\"\u003e#1782\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etqdm v4.69.1 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003econtrib.logging\u003c/code\u003e: preserve filters (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1775\"\u003e#1775\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1581\"\u003e#1581\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erich\u003c/code\u003e: misc fixes (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1773\"\u003e#1773\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003esupport generators (without \u003ccode\u003elen\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1391\"\u003e#1391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix potential \u003ccode\u003eAttributeError\u003c/code\u003e on exit (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1674\"\u003e#1674\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003etotal=float('inf')\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1781\"\u003e#1781\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/651\"\u003e#651\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix potential \u003ccode\u003eAttributeError\u003c/code\u003e on exit (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1778\"\u003e#1778\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1668\"\u003e#1668\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1537\"\u003e#1537\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix minor docs typos (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1780\"\u003e#1780\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1746\"\u003e#1746\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etqdm v4.69.0 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd \u003ccode\u003etqdm.asyncio.gather(..., return_exceptions=False)\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1776\"\u003e#1776\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1671\"\u003e#1671\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1286\"\u003e#1286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emisc minor framework updates\n\u003cul\u003e\n\u003cli\u003ebump workflow actions \u0026amp; pre-commit hooks\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etqdm v4.68.4 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003etrim to \u003ccode\u003encols\u003c/code\u003e even when \u003ccode\u003e'{bar}' not in bar_format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1717\"\u003e#1717\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1767\"\u003e#1767\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003etqdm.write\u003c/code\u003e when \u003ccode\u003estdout=None\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1768\"\u003e#1768\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1654\"\u003e#1654\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/tqdm/tqdm/commit/96f2e60e4584cdab57a23602e27043d0465254ad\"\u003e\u003ccode\u003e96f2e60\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1777\"\u003e#1777\u003c/a\u003e from shermansiu/feat/interpreter-pool\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/c27393ec3a0a91d83dd53f04b80ee61f9c0cd5e4\"\u003e\u003ccode\u003ec27393e\u003c/code\u003e\u003c/a\u003e misc tidy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/061c6236d56f8c1ed0934606c3b4ee5c59cf122e\"\u003e\u003ccode\u003e061c623\u003c/code\u003e\u003c/a\u003e Disable \u003ccode\u003etqdm.monitor_interval\u003c/code\u003e for subinterpreters because they do not have ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/9fc160ba7f959f955058985b0d1122fc9f0b2729\"\u003e\u003ccode\u003e9fc160b\u003c/code\u003e\u003c/a\u003e Update how we check for \u003ccode\u003einterpreter_map\u003c/code\u003e support in the tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/b42463a20fffc17ad4df2aa145076afb0dc4486d\"\u003e\u003ccode\u003eb42463a\u003c/code\u003e\u003c/a\u003e Ensure that subinterpreters can import tqdm while unpickling the initializer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/16d5486c402a2808ec9c398538e0bc56d00866de\"\u003e\u003ccode\u003e16d5486\u003c/code\u003e\u003c/a\u003e Add support for nested progress bars\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/9f5890fda6cf43e66782fbf34647f808bdc66d58\"\u003e\u003ccode\u003e9f5890f\u003c/code\u003e\u003c/a\u003e Add initial implementation for interpreter_map\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/321f920bb7368e27eee04fed1c0de2a8a236fd9d\"\u003e\u003ccode\u003e321f920\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1783\"\u003e#1783\u003c/a\u003e from LuShadowX/reset-inf-total\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/4664b5701ebc5299290a1fb31a229fb1bfc64703\"\u003e\u003ccode\u003e4664b57\u003c/code\u003e\u003c/a\u003e minor tidy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/426a0988a1e9970041f5a649ae8a6376c5293fbe\"\u003e\u003ccode\u003e426a098\u003c/code\u003e\u003c/a\u003e Treat inf total as unknown in reset() too\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tqdm/tqdm/compare/v4.68.3...v4.70.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn[standard]` from 0.49.0 to 0.52.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn[standard]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComplete the closing handshake on server-initiated WebSocket closes in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e and \u003ccode\u003ewsproto\u003c/code\u003e implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing write flow control to the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, preventing data truncation on server-initiated closes with large in-flight payloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3048\"\u003e#3048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle connection loss while a WebSocket write is waiting on backpressure (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3050\"\u003e#3050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eContent-Type\u003c/code\u003e and \u003ccode\u003eContent-Length\u003c/code\u003e headers from WebSocket denial responses on the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, and deliver non-UTF-8 denial bodies intact (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3041\"\u003e#3041\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.0...0.52.1\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.0...0.52.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.0\u003c/h2\u003e\n\u003cp\u003eThis release adds an experimental HTTP/1.1 implementation backed by \u003ca href=\"https://zttp.marcelotryle.com/\"\u003ezttp\u003c/a\u003e, a sans-IO HTTP parser I've been developing on the side: a core written in Zig, with bindings to Python. It has been running under a fuzzer for some weeks now, and has been through multiple rounds of security auditing.\u003c/p\u003e\n\u003cp\u003eIt is still \u003cstrong\u003eexperimental\u003c/strong\u003e, so don't put it in front of production traffic yet. Try it with \u003ccode\u003e--http zttp\u003c/code\u003e, and please send any feedback to the \u003ca href=\"https://github.com/Kludex/uvicorn/issues\"\u003eissue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an experimental \u003ccode\u003ezttp\u003c/code\u003e HTTP/1.1 implementation, selectable with \u003ccode\u003e--http zttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eKeep non-ASCII WebSocket request headers intact with websockets 17.0, which encodes them with ISO-8859-1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3036\"\u003e#3036\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.51.0...0.52.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.51.0...0.52.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.51.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers with overlap on SIGHUP for near-zero-downtime reloads by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3025\"\u003eKludex/uvicorn#3025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove colorama from the standard extra by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3027\"\u003eKludex/uvicorn#3027\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn[standard]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.52.3 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.2 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.1 (August 1, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComplete the closing handshake on server-initiated WebSocket closes in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e and \u003ccode\u003ewsproto\u003c/code\u003e implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing write flow control to the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, preventing data truncation on server-initiated closes with large in-flight payloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3048\"\u003e#3048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle connection loss while a WebSocket write is waiting on backpressure (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3050\"\u003e#3050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eContent-Type\u003c/code\u003e and \u003ccode\u003eContent-Length\u003c/code\u003e headers from WebSocket denial responses on the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, and deliver non-UTF-8 denial bodies intact (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3041\"\u003e#3041\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.0 (July 29, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds an experimental HTTP/1.1 implementation backed by \u003ca href=\"https://zttp.marcelotryle.com/\"\u003ezttp\u003c/a\u003e, a sans-IO HTTP parser I've been developing on the side: a core written in Zig, with bindings to Python. It has been running under a fuzzer for some weeks now, and has been through multiple rounds of security auditing.\u003c/p\u003e\n\u003cp\u003eIt is still \u003cstrong\u003eexperimental\u003c/strong\u003e, so don't put it in front of production traffic yet. Try it with \u003ccode\u003e--http zttp\u003c/code\u003e, and please send any feedback to the \u003ca href=\"https://github.com/Kludex/uvicorn/issues\"\u003eissue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an experimental \u003ccode\u003ezttp\u003c/code\u003e HTTP/1.1 implementation, selectable with \u003ccode\u003e--http zttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eKeep non-ASCII WebSocket request headers intact with websockets 17.0, which encodes them with ISO-8859-1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3036\"\u003e#3036\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.51.0 (July 8, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers one at a time on \u003ccode\u003eSIGHUP\u003c/code\u003e, bringing each replacement up before retiring the old worker, so reloads no longer drop requests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003ecolorama\u003c/code\u003e from the \u003ccode\u003estandard\u003c/code\u003e extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.2 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ewebsockets\u0026gt;=13.0\u003c/code\u003e, which the default \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation needs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\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/Kludex/uvicorn/commit/a68da608147c5f79d962352dce11de8f6e32d972\"\u003e\u003ccode\u003ea68da60\u003c/code\u003e\u003c/a\u003e Version 0.52.3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3068\"\u003e#3068\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/6e3bb4c5c22531c16d341f2da49f2653307f412f\"\u003e\u003ccode\u003e6e3bb4c\u003c/code\u003e\u003c/a\u003e Use zttp 0.0.24 fast receive path (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2a5ff183e02e6dce62f363009c85574bd5a23de2\"\u003e\u003ccode\u003e2a5ff18\u003c/code\u003e\u003c/a\u003e Version 0.52.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3066\"\u003e#3066\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1920297df92b9cf5e6befb00327c1e34276db46f\"\u003e\u003ccode\u003e1920297\u003c/code\u003e\u003c/a\u003e Update zttp to 0.0.22 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/5c560dae6a87f6109d958c6154277f1dc727f704\"\u003e\u003ccode\u003e5c560da\u003c/code\u003e\u003c/a\u003e chore(deps): bump pymdown-extensions from 11.0 to 11.0.1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3061\"\u003e#3061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/ee8e45ca472db17b4aef1d539f209539062d002e\"\u003e\u003ccode\u003eee8e45c\u003c/code\u003e\u003c/a\u003e Version 0.52.1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3056\"\u003e#3056\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b57926d3f46348b5773b184cdf53ae8588300b77\"\u003e\u003ccode\u003eb57926d\u003c/code\u003e\u003c/a\u003e Remove duplicate content headers from WebSocket denial responses on websocket...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/49de1b91d497d038d97a0475f7459fbf66b9b8f9\"\u003e\u003ccode\u003e49de1b9\u003c/code\u003e\u003c/a\u003e chore(deps): bump pymdown-extensions from 10.21.3 to 11.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3042\"\u003e#3042\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2f3fa3ab55b945d34d3933ec267be5b6ca41fc14\"\u003e\u003ccode\u003e2f3fa3a\u003c/code\u003e\u003c/a\u003e Complete server-initiated closes in SansIO WebSocket protocols (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/8c59d55b92b94fd5bee5960d1456ff8cb3072a32\"\u003e\u003ccode\u003e8c59d55\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group with 5 updates (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.49.0...0.52.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically\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/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.0...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.6 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddja...\n\n_Description has been truncated_","html_url":"https://github.com/danielstp/cappuccino2/pull/208","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielstp%2Fcappuccino2/issues/208","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/208/packages"},{"uuid":"5217114662","node_id":"PR_kwDOToIJA88AAAABAlj9Qg","number":15,"state":"closed","title":"Bump the python group across 1 directory with 17 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T18:36:22.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T18:38:25.000Z","updated_at":"2026-09-04T18:36:24.000Z","time_to_close":1209477,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":17,"packages":[{"name":"django","old_version":"6.0.7","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"coverage","old_version":"7.15.2","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djangorestframework-stubs","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.43.1","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.0","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 17 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.7` | `6.1` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail[sendgrid]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.2` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.1` | `3.18.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.43.1` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.0` | `0.16.3` |\n\n\nUpdates `django` from 6.0.7 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.7...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[sendgrid]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[sendgrid]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[sendgrid]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.2 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.2...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.7 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.7...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field...\n\n_Description has been truncated_","html_url":"https://github.com/tchongwangbakayoko619-star/api_gestion_biblotheque/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tchongwangbakayoko619-star%2Fapi_gestion_biblotheque/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"5216433842","node_id":"PR_kwDOTJHTL88AAAABAlBHzQ","number":96,"state":"closed","title":"chore(deps): bump the python group across 1 directory with 19 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T17:08:05.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T17:08:34.000Z","updated_at":"2026-09-04T17:08:07.000Z","time_to_close":1209571,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python","update_count":19,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"coverage","old_version":"7.14.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0"},{"name":"djangorestframework-stubs","old_version":"3.17.0","new_version":"3.18.0","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.39.5","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.20","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 19 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail[mailgun]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.3` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.0` | `3.18.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.39.5` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.16.3` |\n\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[mailgun]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[mailgun]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[mailgun]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `drf-spectacular` from 0.29.0 to 0.30.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tfranzel/drf-spectacular/releases\"\u003edrf-spectacular's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.30.0\u003c/h2\u003e\n\u003cp\u003eAfter working through the backlog for several week, we are finally in a comfortable place again. Thank you to all contributors and users that waited patiently for me the catch up. It does not include all the PRs that were opened, but imho the most critical ones.\u003c/p\u003e\n\u003cp\u003eThis release includes many small improvement, a few bug fixes, updates to the test suite and a renovated test matrix. Some minor schema corrections are to be expected, but nothing drastic. It is mostly fixing small inconsistencies and improving corner cases.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression introduced in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1450\"\u003e#1450\u003c/a\u003e by \u003ca href=\"https://github.com/hoefling\"\u003e\u003ccode\u003e@​hoefling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1469\"\u003etfranzel/drf-spectacular#1469\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dependency definition for Django 5.2 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1487\"\u003etfranzel/drf-spectacular#1487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add support for Django 6.0 and and DRF 3.17 by \u003ca href=\"https://github.com/vgrozdanic\"\u003e\u003ccode\u003e@​vgrozdanic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1496\"\u003etfranzel/drf-spectacular#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Support for unsigned integers uint16, uint32 and uint64 by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1483\"\u003etfranzel/drf-spectacular#1483\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplement x-spec-enum-id for type hint Choices. by \u003ca href=\"https://github.com/noamkush\"\u003e\u003ccode\u003e@​noamkush\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1486\"\u003etfranzel/drf-spectacular#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarifies Docs in Customizations.rst by \u003ca href=\"https://github.com/APCBoston\"\u003e\u003ccode\u003e@​APCBoston\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1489\"\u003etfranzel/drf-spectacular#1489\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd setting to disable docstring extraction by \u003ca href=\"https://github.com/philipstarkey\"\u003e\u003ccode\u003e@​philipstarkey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1491\"\u003etfranzel/drf-spectacular#1491\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add support for polymorphic built-in drf support by \u003ca href=\"https://github.com/mastacheata\"\u003e\u003ccode\u003e@​mastacheata\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1490\"\u003etfranzel/drf-spectacular#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocument \u003ccode\u003edjango-rest-knox\u003c/code\u003e support by \u003ca href=\"https://github.com/johnthagen\"\u003e\u003ccode\u003e@​johnthagen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1503\"\u003etfranzel/drf-spectacular#1503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd help text to spectacular management command arguments \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1175\"\u003e#1175\u003c/a\u003e by \u003ca href=\"https://github.com/jbbqqf\"\u003e\u003ccode\u003e@​jbbqqf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1502\"\u003etfranzel/drf-spectacular#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echange conflicting license field for 3.8 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1504\"\u003etfranzel/drf-spectacular#1504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePr1438 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1505\"\u003etfranzel/drf-spectacular#1505\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd blueprint for django-rest-knox by \u003ca href=\"https://github.com/johnthagen\"\u003e\u003ccode\u003e@​johnthagen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1506\"\u003etfranzel/drf-spectacular#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePr1499 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1511\"\u003etfranzel/drf-spectacular#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eType hint build_bearer_security_scheme_object by \u003ca href=\"https://github.com/johnthagen\"\u003e\u003ccode\u003e@​johnthagen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1509\"\u003etfranzel/drf-spectacular#1509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHousekeeping by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1512\"\u003etfranzel/drf-spectacular#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePr1501 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1514\"\u003etfranzel/drf-spectacular#1514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nullable FileField response schema when blank=True (\u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1493\"\u003e#1493\u003c/a\u003e) by \u003ca href=\"https://github.com/mojtabasohrabi\"\u003e\u003ccode\u003e@​mojtabasohrabi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1501\"\u003etfranzel/drf-spectacular#1501\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/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1487\"\u003etfranzel/drf-spectacular#1487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vgrozdanic\"\u003e\u003ccode\u003e@​vgrozdanic\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1496\"\u003etfranzel/drf-spectacular#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/noamkush\"\u003e\u003ccode\u003e@​noamkush\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1486\"\u003etfranzel/drf-spectacular#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/APCBoston\"\u003e\u003ccode\u003e@​APCBoston\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1489\"\u003etfranzel/drf-spectacular#1489\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/philipstarkey\"\u003e\u003ccode\u003e@​philipstarkey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1491\"\u003etfranzel/drf-spectacular#1491\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mastacheata\"\u003e\u003ccode\u003e@​mastacheata\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1490\"\u003etfranzel/drf-spectacular#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jbbqqf\"\u003e\u003ccode\u003e@​jbbqqf\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1502\"\u003etfranzel/drf-spectacular#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mojtabasohrabi\"\u003e\u003ccode\u003e@​mojtabasohrabi\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1501\"\u003etfranzel/drf-spectacular#1501\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tfranzel/drf-spectacular/compare/0.29.0...0.30.0\"\u003ehttps://github.com/tfranzel/drf-spectacular/compare/0.29.0...0.30.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/tfranzel/drf-spectacular/blob/master/CHANGELOG.rst\"\u003edrf-spectacular's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.30.0 (2026-07-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd OAS 3.2 schema for validation \u0026amp; test\u003c/li\u003e\n\u003cli\u003eType hint build_bearer_security_scheme_object (\u003ccode\u003e[#1509](https://github.com/tfranzel/drf-spectacular/issues/1509) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1509\u0026gt;\u003c/code\u003e_) [johnthagen]\u003c/li\u003e\n\u003cli\u003eFix formatted CharField allow_blank handling (\u003ccode\u003e[#1511](https://github.com/tfranzel/drf-spectacular/issues/1511) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1511\u0026gt;\u003c/code\u003e\u003cem\u003e, (\u003ccode\u003e[#1499](https://github.com/tfranzel/drf-spectacular/issues/1499) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1499\u0026gt;\u003c/code\u003e\u003c/em\u003e)) [Luciano de la Iglesia]\u003c/li\u003e\n\u003cli\u003eConsider allOf anyOf with nullable on OAS3.1 \u003ccode\u003e[#1480](https://github.com/tfranzel/drf-spectacular/issues/1480) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1480\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eProper handling for OAS 3.2\u003c/li\u003e\n\u003cli\u003efix modification of user-provided schematas \u003ccode\u003e[#1500](https://github.com/tfranzel/drf-spectacular/issues/1500) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1500\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003erelax contraint on oneOf null case with OAS3.1 \u003ccode\u003e[#1480](https://github.com/tfranzel/drf-spectacular/issues/1480) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1480\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eAdd blueprint for django-rest-knox (\u003ccode\u003e[#1506](https://github.com/tfranzel/drf-spectacular/issues/1506) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1506\u0026gt;\u003c/code\u003e_) [johnthagen]\u003c/li\u003e\n\u003cli\u003eMitigate GeneratedField lost arguments and special case for DecimalField \u003ccode\u003e[#1166](https://github.com/tfranzel/drf-spectacular/issues/1166) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1166\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eWebhook explicit operationId (\u003ccode\u003e[#1505](https://github.com/tfranzel/drf-spectacular/issues/1505) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1505\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003echange conflicting license field for 3.8 (\u003ccode\u003e[#1504](https://github.com/tfranzel/drf-spectacular/issues/1504) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1504\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eDocument django-rest-knox support [johnthagen]\u003c/li\u003e\n\u003cli\u003eadd help text to spectacular management command arguments \u003ccode\u003e[#1175](https://github.com/tfranzel/drf-spectacular/issues/1175) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1175\u0026gt;\u003c/code\u003e_ [Jean-Baptiste Braun]\u003c/li\u003e\n\u003cli\u003eMark FileField as nullable in response when not required \u003ccode\u003e[#1493](https://github.com/tfranzel/drf-spectacular/issues/1493) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1493\u0026gt;\u003c/code\u003e_ [mojtaba sohrabi]\u003c/li\u003e\n\u003cli\u003eExtend Choices hint fix with generated label description \u003ccode\u003e[#1486](https://github.com/tfranzel/drf-spectacular/issues/1486) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1486\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eSuppress py\u0026lt;=3.14 deprecation warning \u003ccode\u003e[#1497](https://github.com/tfranzel/drf-spectacular/issues/1497) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1497\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eRemove ancient DRF3.11 and Django2.2 due to contrib packages failing\u003c/li\u003e\n\u003cli\u003efeat: add support for django 6.0 and and drf 3.17 [Vjeran Grozdanic]\u003c/li\u003e\n\u003cli\u003eAdd setting to disable docstring extraction [Phil Starkey]\u003c/li\u003e\n\u003cli\u003efeat: add support for polymorphic built-in drf support [Benedikt Bauer]\u003c/li\u003e\n\u003cli\u003eClarifies post-processing hooks [Andy Piltser-Cowan]\u003c/li\u003e\n\u003cli\u003eClarifies customizations step 5 [Andy Piltser-Cowan]\u003c/li\u003e\n\u003cli\u003eFix dependency definition for Django 5.2 [Ülgen Sarıkavak]\u003c/li\u003e\n\u003cli\u003eImplement x-spec-enum-id for type hint Choices. [Noam Kushinsky]\u003c/li\u003e\n\u003cli\u003eAdd Support for unsigned integers uint16, uint32 and uint64 [Nicolas Delaby]\u003c/li\u003e\n\u003cli\u003eFix regression introduced in \u003ccode\u003e[#1450](https://github.com/tfranzel/drf-spectacular/issues/1450) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1450\u0026gt;\u003c/code\u003e_ (\u003ccode\u003e[#1469](https://github.com/tfranzel/drf-spectacular/issues/1469) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1469\u0026gt;\u003c/code\u003e_) [Oleg Höfling]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBreaking changes / important additions:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMany small improvement, bug fixes, updates to the test suite and renovated test matrix. Some minor schema corrections are to be expected, but nothing drastic.\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/tfranzel/drf-spectacular/commit/1a5c44a15b2d06744f49285f1f58992f938a05fa\"\u003e\u003ccode\u003e1a5c44a\u003c/code\u003e\u003c/a\u003e version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/6ba553fc827613d7b36efc9d9f53043e4a2e5443\"\u003e\u003ccode\u003e6ba553f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1514\"\u003e#1514\u003c/a\u003e from tfranzel/pr1501\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/d4787a4e2ef0ff4b7c6a72fe3dddf1ea8e8a963c\"\u003e\u003ccode\u003ed4787a4\u003c/code\u003e\u003c/a\u003e Adapt FileField null handling \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/d8679422975c68bc3a2c97c278957ec043d915c1\"\u003e\u003ccode\u003ed867942\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1512\"\u003e#1512\u003c/a\u003e from tfranzel/housekeeping26\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/5685cf8b731f9a93d9c66003ac2569d4ef7540a8\"\u003e\u003ccode\u003e5685cf8\u003c/code\u003e\u003c/a\u003e Add OAS 3.2 schema for validation \u0026amp; test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/9fa6f7c1f8d99ef14d9dfa11b89f432ba370242f\"\u003e\u003ccode\u003e9fa6f7c\u003c/code\u003e\u003c/a\u003e minor cleanup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/69033ea1e371fb254731c9e9164fd403ace3c5d4\"\u003e\u003ccode\u003e69033ea\u003c/code\u003e\u003c/a\u003e update linting version due to misleading security warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/d9e0de6717c9953b3e9c66da6a5bc6aefb714827\"\u003e\u003ccode\u003ed9e0de6\u003c/code\u003e\u003c/a\u003e Type hint build_bearer_security_scheme_object (\u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1509\"\u003e#1509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/9b18b302b697ba1a5e86271a7e4d090a5995cc21\"\u003e\u003ccode\u003e9b18b30\u003c/code\u003e\u003c/a\u003e Pr1499 (\u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1511\"\u003e#1511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/6e3c72ea5df8e8452a2b8c3e792a7cab23814446\"\u003e\u003ccode\u003e6e3c72e\u003c/code\u003e\u003c/a\u003e Consider allOf anyOf with nullable on OAS3.1 \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1480\"\u003e#1480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tfranzel/drf-spectacular/compare/0.29.0...0.30.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href...\n\n_Description has been truncated_","html_url":"https://github.com/shaoqian-dev/ConvoCore/pull/96","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/shaoqian-dev%2FConvoCore/issues/96","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/96/packages"},{"uuid":"5215887172","node_id":"PR_kwDOTKijKM8AAAABAklCag","number":27,"state":"closed","title":"Bump the python group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T15:56:53.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T15:57:54.000Z","updated_at":"2026-09-04T15:56:54.000Z","time_to_close":1209539,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":20,"packages":[{"name":"django","old_version":"6.0.4","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"coverage","old_version":"7.14.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0"},{"name":"djlint","old_version":"1.40.0","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.20","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"},{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"django-allauth","old_version":"65.16.0","new_version":"65.19.1","repository_url":"https://github.com/sponsors/pennersr"},{"name":"sqlparse","old_version":"0.5.5","new_version":"0.6.0","repository_url":"https://github.com/andialbrecht/sqlparse"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.4` | `6.1` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail[mailgun]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.3` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.40.0` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.16.3` |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.16.0` | `65.19.1` |\n| [sqlparse](https://github.com/andialbrecht/sqlparse) | `0.5.5` | `0.6.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n\n\nUpdates `django` from 6.0.4 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.4...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[mailgun]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[mailgun]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[mailgun]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.14.3 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.0 — 2026-07-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSince 7.14.0, reporting commands implicitly combine parallel data files. Now those commands have a new option \u003ccode\u003e--keep-combined\u003c/code\u003e to retain the data files after combining them instead of the default, which is to delete them. Finishes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2198\"\u003eissue 2198\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report would incorrectly count excluded functions as uncovered, as described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2205\"\u003eissue 2205\u003c/a\u003e. This is now fixed thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2206\"\u003eMartin Kuntz Jacobsen\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWhen running your program, coverage now correctly sets \u003ccode\u003eyourmodule.__spec__.loader\u003c/code\u003e as \u003ca href=\"\"\u003estrongly recommended\u003c/a\u003e, avoiding the deprecation warning described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2208\"\u003eissue 2208\u003c/a\u003e. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2209\"\u003eA5rocks\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: with Python 3.10, running with the \u003ccode\u003e-I\u003c/code\u003e (isolated mode) option didn’t correctly omit the current directory from the module search path, as described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2103\"\u003eissue 2103\u003c/a\u003e. That is now fixed thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2211\"\u003eIlia Sorokin\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.0\"\u003ecoverage 7.15.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.0\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically\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/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.3...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.6 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.6...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djlint` from 1.40.0 to 1.44.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/djlint/djLint/releases\"\u003edjlint's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.44.2\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eH037\u003c/code\u003e no longer reports two attributes whose names differ only before a \u003ccode\u003e.\u003c/code\u003e as duplicates (\u003ccode\u003edata-a.checked\u003c/code\u003e and \u003ccode\u003edata-b.checked\u003c/code\u003e, or alpine's \u003ccode\u003ex-on:click.prevent\u003c/code\u003e and \u003ccode\u003ex-on:keyup.prevent\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAn attribute whose name merely ends in the name a rule looks for is no longer mistaken for it. \u003ccode\u003edata-alt\u003c/code\u003e and \u003ccode\u003edata-x.alt\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent on an image with no \u003ccode\u003ealt\u003c/code\u003e, ...\n\n_Description has been truncated_","html_url":"https://github.com/MarcoCS2007/gtreinos/pull/27","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcoCS2007%2Fgtreinos/issues/27","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/27/packages"}],"issue_packages":[{"old_version":"6.0.6","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-09-04T02:19:10.000Z","version_change":"6.0.6 → 6.1.0","issue":{"uuid":"5343446291","node_id":"PR_kwDOTRUWeM8AAAABCI9iNw","number":22,"state":"closed","title":"chore(deps): bump the python group across 1 directory with 19 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-07T02:19:13.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-04T02:19:10.000Z","updated_at":"2026-09-07T02:19:17.000Z","time_to_close":259203,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python","update_count":19,"packages":[{"name":"daphne","old_version":"4.2.2","new_version":"4.2.3","repository_url":"https://github.com/django/daphne"},{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1","repository_url":"https://github.com/anymail/django-anymail"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.2.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"litellm","old_version":"1.91.1","new_version":"1.99.0","repository_url":"https://github.com/BerriAI/litellm"},{"name":"psycopg","old_version":"3.3.4","new_version":"3.3.5"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"coverage","old_version":"7.15.1","new_version":"7.16.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0"},{"name":"djangorestframework-stubs","old_version":"3.17.0","new_version":"3.18.1","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.40.5","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.21","new_version":"0.16.5","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 19 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [daphne](https://github.com/django/daphne) | `4.2.2` | `4.2.3` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.2.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [litellm](https://github.com/BerriAI/litellm) | `1.91.1` | `1.99.0` |\n| [psycopg[binary]](https://github.com/psycopg/psycopg) | `3.3.4` | `3.3.5` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.1` | `7.16.0` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.0` | `3.18.1` |\n| [djlint](https://github.com/djlint/djLint) | `1.40.5` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.21` | `0.16.5` |\n\n\nUpdates `daphne` from 4.2.2 to 4.2.3\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/daphne/blob/main/CHANGELOG.txt\"\u003edaphne's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.2.3 (2026-07-21)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003e--websocket-max-message-size\u003c/code\u003e and \u003ccode\u003e--websocket-max-frame-size\u003c/code\u003e CLI\nflags to the \u003ccode\u003erunserver\u003c/code\u003e management command for use in development.\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/django/daphne/commit/8a60e56ef8c9b5a4cc4979a3ece6970c73bbd025\"\u003e\u003ccode\u003e8a60e56\u003c/code\u003e\u003c/a\u003e Bumped version and changelog for v4.2.3 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/daphne/commit/389b9a753b165a417c082212f9da015e0cf5fd37\"\u003e\u003ccode\u003e389b9a7\u003c/code\u003e\u003c/a\u003e Add ability to configure websocket message size when running as django dev se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/daphne/commit/0cd79c253b6995952b0f66c3e8509edc9bd78ad7\"\u003e\u003ccode\u003e0cd79c2\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django/daphne/issues/571\"\u003e#571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django/daphne/compare/4.2.2...4.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\u003cbr /\u003e\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\u003cbr /\u003e\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\u003cbr /\u003e\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\u003cbr /\u003e\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\u003cbr /\u003e\nin Django's documentation for recommendations.\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.2.0\u003c/h2\u003e\n\u003cp\u003eCleartext HTTP/2 lands, and an HTTP/2 security fix.\u003c/p\u003e\n\u003ch2\u003eCleartext HTTP/2 (h2c)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp2_cleartext\u003c/code\u003e accepts \u003ccode\u003eprior-knowledge\u003c/code\u003e, \u003ccode\u003eupgrade\u003c/code\u003e, \u003ccode\u003eboth\u003c/code\u003e or \u003ccode\u003eoff\u003c/code\u003e (the\ndefault). Prior knowledge serves a connection that opens with the HTTP/2\npreface; \u003ccode\u003eupgrade\u003c/code\u003e honours an HTTP/1.1 \u003ccode\u003eUpgrade: h2c\u003c/code\u003e request. Both work on the\ngthread, gevent and asgi workers.\u003c/p\u003e\n\u003cp\u003eThis is for deployments where TLS is terminated by a proxy that speaks HTTP/2\nupstream, so the hop into gunicorn no longer drops to HTTP/1.1. Only peers in\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e are considered; everyone else is served HTTP/1.x exactly\nas if the setting were off. Each mechanism is enabled separately, so turning one\non does not turn the other on.\u003c/p\u003e\n\u003cp\u003eDo not expose a cleartext HTTP/2 port to the internet.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eHTTP2Request\u003c/code\u003e built its headers straight from the stream, so nothing the HTTP/1\npath enforces applied over HTTP/2: the underscore and \u003ccode\u003eheader_map\u003c/code\u003e policy,\nduplicate \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e, control characters in values, and the\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e trust gate. An untrusted client could set \u003ccode\u003eSCRIPT_NAME\u003c/code\u003e\nand forge \u003ccode\u003eHTTP_*\u003c/code\u003e entries in the WSGI environ, and decide \u003ccode\u003ewsgi.url_scheme\u003c/code\u003e\nthrough \u003ccode\u003e:scheme\u003c/code\u003e. Both request classes now share one policy mixin, and the\nscheme comes from the transport.\u003c/p\u003e\n\u003cp\u003eIf you serve HTTP/2, this is the reason to upgrade.\u003c/p\u003e\n\u003ch2\u003eOther HTTP/2 fixes\u003c/h2\u003e\n\u003cp\u003eWSGI responses were buffered whole before anything was sent; they stream now.\nHEAD, 204 and 304 no longer carry a body. Events read while blocked on a\nflow-control window were discarded, losing requests and body data outright.\n\u003ccode\u003esendfile()\u003c/code\u003e is refused on HTTP/2 responses rather than bypassing framing.\u003c/p\u003e\n\u003ch2\u003eRequest bodies dropped on Upgrade requests\u003c/h2\u003e\n\u003cp\u003eOn the ASGI worker with the fast parser, any request carrying an \u003ccode\u003eUpgrade\u003c/code\u003e\nheader reached the application with an empty body, whatever the header's value\nand with HTTP/2 switched off entirely. Fixed in \u003ccode\u003egunicorn_h1c\u003c/code\u003e 0.6.9, which the\n\u003ccode\u003efast\u003c/code\u003e extra now requires.\u003c/p\u003e\n\u003cp\u003eFull changelog: \u003ca href=\"https://gunicorn.org/news/\"\u003ehttps://gunicorn.org/news/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/36f2a3c1b80dfa41d70859d12c5bfbbdc23a3c38\"\u003e\u003ccode\u003e36f2a3c\u003c/code\u003e\u003c/a\u003e gunicorn 26.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbba3505f423bfb91af3a87e49ed9d232f39a8fe\"\u003e\u003ccode\u003ecbba350\u003c/code\u003e\u003c/a\u003e test: cover the h2c edge paths that had none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/988541112ebcf3f795c020fc394aa7eed75f9f53\"\u003e\u003ccode\u003e9885411\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3703\"\u003e#3703\u003c/a\u003e from cormier/fix-inconsistency-in-control-socket-docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/86f0919806a2d4d4cce376cc2088352e7643b139\"\u003e\u003ccode\u003e86f0919\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3704\"\u003e#3704\u003c/a\u003e from methane/doc-wsgi-h1c\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/585355122efe736946b977c5605e404ff2d6ddd4\"\u003e\u003ccode\u003e5853551\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3712\"\u003e#3712\u003c/a\u003e from Rotzbua/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7bce87e2aa29a4a794eb2b113ff811cad6a80736\"\u003e\u003ccode\u003e7bce87e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3700\"\u003e#3700\u003c/a\u003e from benoitc/fix/sponsor-logo-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/972dfb03b110c430712c32a3d92ef6397ff8eff6\"\u003e\u003ccode\u003e972dfb0\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3690\"\u003e#3690\u003c/a\u003e from melbinjp/docs/contributing-settings-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7b3f16be8d9cc051538b7f0b58b236b37c9550f8\"\u003e\u003ccode\u003e7b3f16b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3711\"\u003e#3711\u003c/a\u003e from benoitc/docs/http2-changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5bf237c0c7ef5bcdc63046645a17d6bafd609a34\"\u003e\u003ccode\u003e5bf237c\u003c/code\u003e\u003c/a\u003e http2: require gunicorn_h1c 0.6.9 and drop the upgrade body workaround\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7cf03385c574228e28c4952fd410ed2df02acc94\"\u003e\u003ccode\u003e7cf0338\u003c/code\u003e\u003c/a\u003e test: skip the fast-parser cases when gunicorn_h1c is absent\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `litellm` from 1.91.1 to 1.99.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/BerriAI/litellm/releases\"\u003elitellm's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.99.0\u003c/h2\u003e\n\u003ch2\u003eVerify Docker Image Signature\u003c/h2\u003e\n\u003cp\u003eAll LiteLLM Docker images are signed with \u003ca href=\"https://docs.sigstore.dev/cosign/overview/\"\u003ecosign\u003c/a\u003e. Every release is signed with the same key introduced in \u003ca href=\"https://github.com/BerriAI/litellm/commit/0112e53046018d726492c814b3644b7d376029d0\"\u003ecommit \u003ccode\u003e0112e53\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eVerify using the pinned commit hash (recommended):\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eA commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003ecosign verify \\\n  --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \\\n  ghcr.io/berriai/litellm:v1.99.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eVerify using the release tag (convenience):\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eTags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003ecosign verify \\\n  --key https://raw.githubusercontent.com/BerriAI/litellm/v1.99.0/cosign.pub \\\n  ghcr.io/berriai/litellm:v1.99.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eExpected output:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eThe following checks were performed on each of these signatures:\n  - The cosign claims were validated\n  - The signatures were verified against the specified public key\n\u003c/code\u003e\u003c/pre\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore(typing): drop 1.3k basedpyright errors across 30 Any hotspot files by \u003ca href=\"https://github.com/mateo-berri\"\u003e\u003ccode\u003e@​mateo-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/37073\"\u003eBerriAI/litellm#37073\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(proxy): register WebSocket passthrough for OpenAI prefixes by \u003ca href=\"https://github.com/LHMQ878\"\u003e\u003ccode\u003e@​LHMQ878\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36151\"\u003eBerriAI/litellm#36151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(bedrock): report uploaded size in the FileObject returned by managed batch uploads by \u003ca href=\"https://github.com/devin-ai-integration\"\u003e\u003ccode\u003e@​devin-ai-integration\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36392\"\u003eBerriAI/litellm#36392\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(batches): support AWS Bedrock batch cancellation via \u003ccode\u003eStopModelInvocationJob\u003c/code\u003e by \u003ca href=\"https://github.com/ArjunPakhan\"\u003e\u003ccode\u003e@​ArjunPakhan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/34087\"\u003eBerriAI/litellm#34087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Async Rust OCR Bridge and MCP OAuth UI Restore by \u003ca href=\"https://github.com/ArjunPakhan\"\u003e\u003ccode\u003e@​ArjunPakhan\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/31453\"\u003eBerriAI/litellm#31453\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(batches): don't crash logging when a completed batch has no output file by \u003ca href=\"https://github.com/MUSE-CODE-SPACE\"\u003e\u003ccode\u003e@​MUSE-CODE-SPACE\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/34067\"\u003eBerriAI/litellm#34067\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(UI): add default model pin to complexity router UI by \u003ca href=\"https://github.com/tin-berri\"\u003e\u003ccode\u003e@​tin-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36615\"\u003eBerriAI/litellm#36615\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(ui): add Lite mixed-provider auto-router preset by \u003ca href=\"https://github.com/tin-berri\"\u003e\u003ccode\u003e@​tin-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/37068\"\u003eBerriAI/litellm#37068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(ui): link key info header to its user, creator, team, and organization by \u003ca href=\"https://github.com/ryan-crabbe-berri\"\u003e\u003ccode\u003e@​ryan-crabbe-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/37187\"\u003eBerriAI/litellm#37187\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(guardrails): scan text on /guardrails/apply_guardrail for Azure Content Safety by \u003ca href=\"https://github.com/yucheng-berri\"\u003e\u003ccode\u003e@​yucheng-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36894\"\u003eBerriAI/litellm#36894\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(bedrock): forward LiteLLM identity and metadata into Bedrock requestMetadata by \u003ca href=\"https://github.com/yassin-berriai\"\u003e\u003ccode\u003e@​yassin-berriai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36861\"\u003eBerriAI/litellm#36861\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(azure): rename max_tokens to max_completion_tokens for gpt-5-chat deployments by \u003ca href=\"https://github.com/yassin-berriai\"\u003e\u003ccode\u003e@​yassin-berriai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36857\"\u003eBerriAI/litellm#36857\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(bedrock): preserve cache token usage when invocationMetrics replace the usage block by \u003ca href=\"https://github.com/brian5021\"\u003e\u003ccode\u003e@​brian5021\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36878\"\u003eBerriAI/litellm#36878\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(proxy): registry caches stop per-request tag and end-user Postgres reads in auth by \u003ca href=\"https://github.com/ryan-crabbe-berri\"\u003e\u003ccode\u003e@​ryan-crabbe-berri\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36801\"\u003eBerriAI/litellm#36801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest(e2e): replay a real tool-search assistant turn back to Bedrock Invoke by \u003ca href=\"https://github.com/yassin-berriai\"\u003e\u003ccode\u003e@​yassin-berriai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BerriAI/litellm/pull/36856\"\u003eBerriAI/litellm#36856\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/BerriAI/litellm/commit/fa647f742d7baefe8eb1181899d9c81b41559772\"\u003e\u003ccode\u003efa647f7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/39048\"\u003e#39048\u003c/a\u003e from BerriAI/litellm_/docker-build-failure-9f6247\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/5892e30d4254376c77ac17040d27e2270cab65ae\"\u003e\u003ccode\u003e5892e30\u003c/code\u003e\u003c/a\u003e fix(docker): pin apk python to 3.13 in migrations image\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/91f1a5710064452bda834ae6446d891c90c46dd1\"\u003e\u003ccode\u003e91f1a57\u003c/code\u003e\u003c/a\u003e fix(docker): bump wolfi-base for glibc 2.44 and pin apk python to 3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/d0c86678ed3c8951a2c47ed1b1fabcf8de65b553\"\u003e\u003ccode\u003ed0c8667\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/38862\"\u003e#38862\u003c/a\u003e from BerriAI/litellm_/litellm-e2e-rc-1-99-0-11cfd8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/da1d292dceeaf8f098ea9955eeaf7e7fb2a74a02\"\u003e\u003ccode\u003eda1d292\u003c/code\u003e\u003c/a\u003e test(e2e): measure the select popup after it settles instead of mid-flight\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/a2aecfea7f2905ed569ccc8d733efcff13c3074c\"\u003e\u003ccode\u003ea2aecfe\u003c/code\u003e\u003c/a\u003e fix(e2e): only the negative fallback assertion needs every replica to agree\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/ab1da05e5987816047f06f396288fee8d673db1c\"\u003e\u003ccode\u003eab1da05\u003c/code\u003e\u003c/a\u003e test(e2e): de-flake the cost-header cache read and the router fallback control\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/141185268450a248cb5bb251da3ac503273a1648\"\u003e\u003ccode\u003e1411852\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/38855\"\u003e#38855\u003c/a\u003e from BerriAI/litellm_/backport-38251-rc-1-99-0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/f0ee067aaa3a6d356a9806a4216dd524916ff231\"\u003e\u003ccode\u003ef0ee067\u003c/code\u003e\u003c/a\u003e fix(anthropic): translate tool_result document blocks in the /v1/messages bridge\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BerriAI/litellm/commit/4b281e7892937b9710e5a679d8fa75e8b0d99fac\"\u003e\u003ccode\u003e4b281e7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BerriAI/litellm/issues/38854\"\u003e#38854\u003c/a\u003e from BerriAI/litellm_backport_model_test_dialog_str...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/BerriAI/litellm/compare/v1.91.1...v1.99.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg[binary]` from 3.3.4 to 3.3.5\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg/blob/master/docs/news.rst\"\u003epsycopg[binary]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. currentmodule:: psycopg\u003c/p\u003e\n\u003cp\u003e.. index::\nsingle: Release notes\nsingle: News\u003c/p\u003e\n\u003ch1\u003e\u003ccode\u003epsycopg\u003c/code\u003e release notes\u003c/h1\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003ePsycopg 3.3.5\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDiscard prepared statements upon :sql:\u003ccode\u003eALTER *\u003c/code\u003e or \u003ccode\u003eDISCARD *\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1307](https://github.com/psycopg/psycopg/issues/1307)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!ProgrammingError\u003c/code\u003e when dumping non-\u003ccode\u003e!None\u003c/code\u003e values with\nno \u003ccode\u003e!NoneType\u003c/code\u003e dumper registered in python implementation (:ticket:\u003ccode\u003e[#1325](https://github.com/psycopg/psycopg/issues/1325)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!wait_selector\u003c/code\u003e wait function to not raise \u003ccode\u003e!KeyError\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1327](https://github.com/psycopg/psycopg/issues/1327)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!DataError\u003c/code\u003e messages leaking the literal \u003ccode\u003e{...}\u003c/code\u003e placeholder instead\nof the offending value when loading a pre-year-1 :sql:\u003ccode\u003etimestamp\u003c/code\u003e or a\nmalformed binary :sql:\u003ccode\u003ejsonb\u003c/code\u003e value (:ticket:\u003ccode\u003e[#1372](https://github.com/psycopg/psycopg/issues/1372)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e instead of \u003ccode\u003e!ValueError\u003c/code\u003e when \u003ccode\u003e~psycopg.rows.namedtuple_row\u003c/code\u003e\nreceives duplicate column names (:ticket:\u003ccode\u003e[#1348](https://github.com/psycopg/psycopg/issues/1348)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e on inconsistent copy data (:tickets:\u003ccode\u003e[#1359](https://github.com/psycopg/psycopg/issues/1359), [#1360](https://github.com/psycopg/psycopg/issues/1360)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eHandle client encodings aliases (:ticket:\u003ccode\u003e[#1363](https://github.com/psycopg/psycopg/issues/1363)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix building C extension with Cython 3.3.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.4\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix possible spurious connection timeout in systems with very long uptimes\nin C extension (:ticket:\u003ccode\u003e[#1280](https://github.com/psycopg/psycopg/issues/1280)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix client-side adaptation of enums whose name require quotes\n(:ticket:\u003ccode\u003e[#1298](https://github.com/psycopg/psycopg/issues/1298)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eConsistently populate \u003ccode\u003e~Cursor.statusmessage\u003c/code\u003e after \u003ccode\u003e~Cursor.executemany()\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1302](https://github.com/psycopg/psycopg/issues/1302)\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.3\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRetain \u003ccode\u003eError.pgconn\u003c/code\u003e when raising a single exception for multiple connection\nattempt errors (:ticket:\u003ccode\u003e[#1246](https://github.com/psycopg/psycopg/issues/1246)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eReturn a proper error when server sends \u003ccode\u003eErrorResponse\u003c/code\u003e for a \u003ccode\u003eSync\u003c/code\u003e after\na \u003ccode\u003eParse\u003c/code\u003e (:ticket:\u003ccode\u003e[#1260](https://github.com/psycopg/psycopg/issues/1260)\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/psycopg/psycopg/commit/ea542c9534cc9841d50450e0c156b549cc6c805a\"\u003e\u003ccode\u003eea542c9\u003c/code\u003e\u003c/a\u003e chore: bump psycopg package version to 3.3.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/8d31e4711c22b206d8863b9397b3b34f5b106e4d\"\u003e\u003ccode\u003e8d31e47\u003c/code\u003e\u003c/a\u003e chore(deps): bump the actions group across 1 directory with 4 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/268f863e0e8dbdbaf4f10616ebd14ff00edaeb51\"\u003e\u003ccode\u003e268f863\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1370\"\u003e#1370\u003c/a\u003e from Sanjays2402/fix/truncated-binary-copy-error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/a412fa4d682f035a9cf3c7886a5c95c15c64ba96\"\u003e\u003ccode\u003ea412fa4\u003c/code\u003e\u003c/a\u003e docs: put together different issues fixed around copy parsing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/f757307068aef06e439cf164915a3781acf483b5\"\u003e\u003ccode\u003ef757307\u003c/code\u003e\u003c/a\u003e fix: clearer error messages according to truncated copy message part\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/b1f17c44096b8fbc90836d9652d083f23c88e28d\"\u003e\u003ccode\u003eb1f17c4\u003c/code\u003e\u003c/a\u003e test: move existing COPY format parsing tests into a single module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/21eba573f9356276b2a3e0b7c1d86fad03f2872f\"\u003e\u003ccode\u003e21eba57\u003c/code\u003e\u003c/a\u003e test: drop useless parametrization of copy binary parsigh test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/6780e17bcee0b838dedd0aa9c1b6dcc563a50cec\"\u003e\u003ccode\u003e6780e17\u003c/code\u003e\u003c/a\u003e fix(copy): handle truncated binary row headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/2f2fcfbf35af4b80a4755fff75fe8b8f5e059193\"\u003e\u003ccode\u003e2f2fcfb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1364\"\u003e#1364\u003c/a\u003e from DylanYoung/fix_client_encoding_aliases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/ccc351ec3180969d105199012a017240492a43c0\"\u003e\u003ccode\u003eccc351e\u003c/code\u003e\u003c/a\u003e refactor: don't store the encodings raw table as a dict\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg/compare/3.3.4...3.3.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.1 to 7.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.16.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen combining files, now path separator slashes will automatically be converted to the local file system style. This makes it less necessary to define \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003eissue 2266\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ca href=\"https://coverage.readthedocs.io/en/latest/api_coverage.html#coverage.Coverage.switch_context\"\u003eCoverage.switch_context()\u003c/a\u003e method now returns the previous context.\u003c/li\u003e\n\u003cli\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file path when it was only meant to be replaced once, in the leading portion of the path. This is now fixed, in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003epull 2268\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixes to validation of options and configuration settings:\n\u003cul\u003e\n\u003cli\u003eNegative precision settings now always cause useful error messages (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003epull 2261\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing “Couldn’t use data file …: user-defined function raised exception” error. Now it raises a proper configuration error naming the bad regex, like other regex settings do (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003epull 2262\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eNon-string values in TOML configuration settings now produce a helpful error message instead of a traceback. This affects list settings whose elements aren’t strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e entry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the \u003ccode\u003e[paths]\u003c/code\u003e section (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003epull 2263\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like \u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can’t reach the subprocesses. The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as the entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e slipped through and failed later with “Can’t combine statement coverage data with branch data”. Each named concurrency library is now properly considered (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2270\"\u003epull 2270\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any measured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on Windows. The original extension is now restored on the annotated copy (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003epull 2265\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.16.0\"\u003ecoverage 7.16.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.16.0\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWhen combining files, now path separator slashes will automatically be\nconverted to the local file system style. This makes it less necessary to\ndefine \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems.\nFixes \u003ccode\u003eissue 2266\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe :meth:\u003ccode\u003e.Coverage.switch_context\u003c/code\u003e method now returns the previous context.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file\npath when it was only meant to be replaced once, in the leading portion of\nthe path. This is now fixed, in \u003ccode\u003epull 2268\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixes to validation of options and configuration settings:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNegative precision settings now always cause useful error messages (\u003ccode\u003epull 2261\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing \u0026quot;Couldn't use data file ...:\nuser-defined function raised exception\u0026quot; error. Now it raises a proper\nconfiguration error naming the bad regex, like other regex settings do\n(\u003ccode\u003epull 2262\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNon-string values in TOML configuration settings now produce a helpful\nerror message instead of a traceback.  This affects list settings whose\nelements aren't strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e\nentry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the\n\u003ccode\u003e[paths]\u003c/code\u003e section (\u003ccode\u003epull 2263\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like\n\u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can't\nreach the subprocesses.  The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as\nthe entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e\nslipped through and failed later with \u0026quot;Can't combine statement coverage\ndata with branch data\u0026quot;.  Each named concurrency library is now properly\nconsidered (\u003ccode\u003epull 2270\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any\nmeasured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on\nWindows.  The original extension is now restored on the annotated copy (\u003ccode\u003epull 2265\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2261: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003ecoveragepy/coveragepy#2261\u003c/a\u003e\n.. _pull 2262: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003ecoveragepy/coveragepy#2262\u003c/a\u003e\n.. _pull 2263: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003ecoveragepy/coveragepy#2263\u003c/a\u003e\n.. _pull 2265: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003ecoveragepy/coveragepy#2265\u003c/a\u003e\n.. _issue 2266: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003ecoveragepy/coveragepy#2266\u003c/a\u003e\n.. _pull 2268: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003ecoveragepy/coveragepy#2268\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/coveragepy/coveragepy/commit/3e9fc1653ef31089d02eb7618b9d9ac9414378fc\"\u003e\u003ccode\u003e3e9fc16\u003c/code\u003e\u003c/a\u003e docs: prep for 7.16.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/38be8d13afee6b6525492fc375c739cdfb675e9b\"\u003e\u003ccode\u003e38be8d1\u003c/code\u003e\u003c/a\u003e build: control check-manifest explicitly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/8eb1266ead5c6d356d3437637a509ff86b566253\"\u003e\u003ccode\u003e8eb1266\u003c/code\u003e\u003c/a\u003e docs(build): no longer commit sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1a8b3fa57d56bb70bad62c93d224c18a0fbaae6f\"\u003e\u003ccode\u003e1a8b3fa\u003c/code\u003e\u003c/a\u003e docs: remove sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/aeaa79b812d1bc637ebb5582ab12c076e192c87e\"\u003e\u003ccode\u003eaeaa79b\u003c/code\u003e\u003c/a\u003e docs: linklint is now sphinx-linklint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d5eaf3f6d38f58746bc69e87e64c0b0277a9077d\"\u003e\u003ccode\u003ed5eaf3f\u003c/code\u003e\u003c/a\u003e test: a branchless way to re-add extensions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/57e52fd431cecc1ca03de2c5b1288e0b330c2ef4\"\u003e\u003ccode\u003e57e52fd\u003c/code\u003e\u003c/a\u003e docs: adjust CHANGES for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b9d304d77f7ce3d55df3a46339dbc56d1f49df58\"\u003e\u003ccode\u003eb9d304d\u003c/code\u003e\u003c/a\u003e fix: check for multiprocessing in a --concurrency list (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a6ef9284afbc7d1f392821864b64ddbda0051fc5\"\u003e\u003ccode\u003ea6ef928\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/070461fcfde0437b5b778c2c2a72e433a0a391aa\"\u003e\u003ccode\u003e070461f\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 4 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2271\"\u003e#2271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.1...7.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ek...\n\n_Description has been truncated_","html_url":"https://github.com/KScaesar/MaiAgent2026/pull/22","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/KScaesar%2FMaiAgent2026/issues/22","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/22/packages"}},{"old_version":"6.0.7","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-09-04T01:56:54.000Z","version_change":"6.0.7 → 6.1.0","issue":{"uuid":"5343309561","node_id":"PR_kwDOOke-mM8AAAABCI3CCw","number":22,"state":"closed","title":"Bump the python group across 1 directory with 15 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-07T01:58:05.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-04T01:56:54.000Z","updated_at":"2026-09-07T01:58:07.000Z","time_to_close":259271,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":15,"packages":[{"name":"django","old_version":"6.0.7","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"gevent","old_version":"26.7.0","new_version":"26.8.0","repository_url":"https://github.com/gevent/gevent"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.2.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"sentry-sdk","old_version":"2.66.1","new_version":"2.68.1","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djangorestframework-stubs","old_version":"3.17.1","new_version":"3.18.1","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.22","new_version":"0.16.5","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 15 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.7` | `6.1` |\n| [django-anymail[mailgun]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [gevent](https://github.com/gevent/gevent) | `26.7.0` | `26.8.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.2.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.66.1` | `2.68.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.1` | `3.18.1` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.22` | `0.16.5` |\n\n\nUpdates `django` from 6.0.7 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.7...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[mailgun]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[mailgun]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[mailgun]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gevent` from 26.7.0 to 26.8.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/4f684105f537eeceb9988adbfe81420a1f28d9a0\"\u003e\u003ccode\u003e4f68410\u003c/code\u003e\u003c/a\u003e Preparing release 26.8.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/10489c56d3b03caae5be00bc46996a0180ab3d8c\"\u003e\u003ccode\u003e10489c5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2199\"\u003e#2199\u003c/a\u003e from florentinl/florentin.labelle/fix/hubless-thread...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/d4f5f098c5d6655e9700336ed6f15e924a7fd142\"\u003e\u003ccode\u003ed4f5f09\u003c/code\u003e\u003c/a\u003e Document the args[0] cross-thread wakeup mechanism\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/9b049915e8e308e4286f922fd51baf9d92187a88\"\u003e\u003ccode\u003e9b04991\u003c/code\u003e\u003c/a\u003e Run test_cross_thread_callback_can_run_before_scheduling_returns on all backends\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/ce7996d7048d3555be2869cc6172d47e332efb58\"\u003e\u003ccode\u003ece7996d\u003c/code\u003e\u003c/a\u003e Address review comments: document cross-thread race, drop unneeded cpdef\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/5288a6eec90ca63f9658b44d67f14fbdfe07259d\"\u003e\u003ccode\u003e5288a6e\u003c/code\u003e\u003c/a\u003e Add missing \u003ca href=\"https://github.com/ignores\"\u003e\u003ccode\u003e@​ignores\u003c/code\u003e\u003c/a\u003e_leakcheck to new cross-thread test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/c72eda095d99e82ca0c767afe56baecbc4c131a2\"\u003e\u003ccode\u003ec72eda0\u003c/code\u003e\u003c/a\u003e Fix cross-thread notifier scheduling race\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/908b93730ffef5cee0594e4482b3a43b476c43a4\"\u003e\u003ccode\u003e908b937\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2195\"\u003e#2195\u003c/a\u003e from ddorian/fix-popen-exit-reentrant-close\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/b58795f8a659e767b0317cd199d68f273b742167\"\u003e\u003ccode\u003eb58795f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/gevent/gevent/issues/2191\"\u003e#2191\u003c/a\u003e from ddorian/fix-1865-global-shutdown-lock\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gevent/gevent/commit/ede2e71a859198b96a22f4c683fa210e750406e6\"\u003e\u003ccode\u003eede2e71\u003c/code\u003e\u003c/a\u003e Always use 'versionchanged:: NEXT' to let the release machinery fill in the c...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gevent/gevent/compare/26.7.0...26.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.2.0\u003c/h2\u003e\n\u003cp\u003eCleartext HTTP/2 lands, and an HTTP/2 security fix.\u003c/p\u003e\n\u003ch2\u003eCleartext HTTP/2 (h2c)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp2_cleartext\u003c/code\u003e accepts \u003ccode\u003eprior-knowledge\u003c/code\u003e, \u003ccode\u003eupgrade\u003c/code\u003e, \u003ccode\u003eboth\u003c/code\u003e or \u003ccode\u003eoff\u003c/code\u003e (the\ndefault). Prior knowledge serves a connection that opens with the HTTP/2\npreface; \u003ccode\u003eupgrade\u003c/code\u003e honours an HTTP/1.1 \u003ccode\u003eUpgrade: h2c\u003c/code\u003e request. Both work on the\ngthread, gevent and asgi workers.\u003c/p\u003e\n\u003cp\u003eThis is for deployments where TLS is terminated by a proxy that speaks HTTP/2\nupstream, so the hop into gunicorn no longer drops to HTTP/1.1. Only peers in\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e are considered; everyone else is served HTTP/1.x exactly\nas if the setting were off. Each mechanism is enabled separately, so turning one\non does not turn the other on.\u003c/p\u003e\n\u003cp\u003eDo not expose a cleartext HTTP/2 port to the internet.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eHTTP2Request\u003c/code\u003e built its headers straight from the stream, so nothing the HTTP/1\npath enforces applied over HTTP/2: the underscore and \u003ccode\u003eheader_map\u003c/code\u003e policy,\nduplicate \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e, control characters in values, and the\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e trust gate. An untrusted client could set \u003ccode\u003eSCRIPT_NAME\u003c/code\u003e\nand forge \u003ccode\u003eHTTP_*\u003c/code\u003e entries in the WSGI environ, and decide \u003ccode\u003ewsgi.url_scheme\u003c/code\u003e\nthrough \u003ccode\u003e:scheme\u003c/code\u003e. Both request classes now share one policy mixin, and the\nscheme comes from the transport.\u003c/p\u003e\n\u003cp\u003eIf you serve HTTP/2, this is the reason to upgrade.\u003c/p\u003e\n\u003ch2\u003eOther HTTP/2 fixes\u003c/h2\u003e\n\u003cp\u003eWSGI responses were buffered whole before anything was sent; they stream now.\nHEAD, 204 and 304 no longer carry a body. Events read while blocked on a\nflow-control window were discarded, losing requests and body data outright.\n\u003ccode\u003esendfile()\u003c/code\u003e is refused on HTTP/2 responses rather than bypassing framing.\u003c/p\u003e\n\u003ch2\u003eRequest bodies dropped on Upgrade requests\u003c/h2\u003e\n\u003cp\u003eOn the ASGI worker with the fast parser, any request carrying an \u003ccode\u003eUpgrade\u003c/code\u003e\nheader reached the application with an empty body, whatever the header's value\nand with HTTP/2 switched off entirely. Fixed in \u003ccode\u003egunicorn_h1c\u003c/code\u003e 0.6.9, which the\n\u003ccode\u003efast\u003c/code\u003e extra now requires.\u003c/p\u003e\n\u003cp\u003eFull changelog: \u003ca href=\"https://gunicorn.org/news/\"\u003ehttps://gunicorn.org/news/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/36f2a3c1b80dfa41d70859d12c5bfbbdc23a3c38\"\u003e\u003ccode\u003e36f2a3c\u003c/code\u003e\u003c/a\u003e gunicorn 26.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbba3505f423bfb91af3a87e49ed9d232f39a8fe\"\u003e\u003ccode\u003ecbba350\u003c/code\u003e\u003c/a\u003e test: cover the h2c edge paths that had none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/988541112ebcf3f795c020fc394aa7eed75f9f53\"\u003e\u003ccode\u003e9885411\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3703\"\u003e#3703\u003c/a\u003e from cormier/fix-inconsistency-in-control-socket-docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/86f0919806a2d4d4cce376cc2088352e7643b139\"\u003e\u003ccode\u003e86f0919\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3704\"\u003e#3704\u003c/a\u003e from methane/doc-wsgi-h1c\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/585355122efe736946b977c5605e404ff2d6ddd4\"\u003e\u003ccode\u003e5853551\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3712\"\u003e#3712\u003c/a\u003e from Rotzbua/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7bce87e2aa29a4a794eb2b113ff811cad6a80736\"\u003e\u003ccode\u003e7bce87e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3700\"\u003e#3700\u003c/a\u003e from benoitc/fix/sponsor-logo-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/972dfb03b110c430712c32a3d92ef6397ff8eff6\"\u003e\u003ccode\u003e972dfb0\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3690\"\u003e#3690\u003c/a\u003e from melbinjp/docs/contributing-settings-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7b3f16be8d9cc051538b7f0b58b236b37c9550f8\"\u003e\u003ccode\u003e7b3f16b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3711\"\u003e#3711\u003c/a\u003e from benoitc/docs/http2-changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5bf237c0c7ef5bcdc63046645a17d6bafd609a34\"\u003e\u003ccode\u003e5bf237c\u003c/code\u003e\u003c/a\u003e http2: require gunicorn_h1c 0.6.9 and drop the upgrade body workaround\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7cf03385c574228e28c4952fd410ed2df02acc94\"\u003e\u003ccode\u003e7cf0338\u003c/code\u003e\u003c/a\u003e test: skip the fast-parser cases when gunicorn_h1c is absent\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.66.1 to 2.68.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.1\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eenable_logs\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e(logs) Don't stop sending auto-collected logs when \u003ccode\u003eenable_logs=True\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7237\"\u003e#7237\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIf you have \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e, our logging integrations for the standard library logging module as well as Loguru will auto-collect logs and send them to Sentry as Sentry logs by default, preserving old behavior. Turning automatic collection off for a specific integration can still be achieved using the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration option.\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nenable_logs=True,\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=False),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003ePlease note that the \u003ccode\u003eenable_logs\u003c/code\u003e option is deprecated and will be removed in the next major release. The \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API now works regardless of it, and auto-collection can be opted into via the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration-level options, which are \u003ccode\u003eFalse\u003c/code\u003e by default, unless you have \u003ccode\u003eenable_logs=True\u003c/code\u003e. We've added this compatibility layer to make the transition to a \u003ccode\u003eenable_logs\u003c/code\u003e-free world easier.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Add \u003ccode\u003efailed_request_status_codes\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7140\"\u003e#7140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(anthropic) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7207\"\u003e#7207\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(google_genai) Gate streaming \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7210\"\u003e#7210\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langchain) Use \u003ccode\u003egen_ai.tool.definitions\u003c/code\u003e attribute when data collection is enabled by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7204\"\u003e#7204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langgraph,huggingface_hub) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7208\"\u003e#7208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7205\"\u003e#7205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai_agents) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7209\"\u003e#7209\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003c/code\u003e\u003c/pre\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/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.1\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eenable_logs\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e(logs) Don't stop sending auto-collected logs when \u003ccode\u003eenable_logs=True\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7237\"\u003e#7237\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIf you have \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e, our logging integrations for the standard library logging module as well as Loguru will auto-collect logs and send them to Sentry as Sentry logs by default, preserving old behavior. Turning automatic collection off for a specific integration can still be achieved using the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration option.\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nenable_logs=True,\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=False),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003ePlease note that the \u003ccode\u003eenable_logs\u003c/code\u003e option is deprecated and will be removed in the next major release. The \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API now works regardless of it, and auto-collection can be opted into via the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration-level options, which are \u003ccode\u003eFalse\u003c/code\u003e by default, unless you have \u003ccode\u003eenable_logs=True\u003c/code\u003e. We've added this compatibility layer to make the transition to a \u003ccode\u003eenable_logs\u003c/code\u003e-free world easier.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Add \u003ccode\u003efailed_request_status_codes\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7140\"\u003e#7140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(anthropic) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7207\"\u003e#7207\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(google_genai) Gate streaming \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7210\"\u003e#7210\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langchain) Use \u003ccode\u003egen_ai.tool.definitions\u003c/code\u003e attribute when data collection is enabled by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7204\"\u003e#7204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langgraph,huggingface_hub) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7208\"\u003e#7208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7205\"\u003e#7205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai_agents) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7209\"\u003e#7209\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003e\u003c/code\u003e\u003c/pre\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/getsentry/sentry-python/commit/98f7d91809e71ed5a7b827f8b4f9acfc7ac1bae0\"\u003e\u003ccode\u003e98f7d91\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/8f886ff9b784da7c45f51a0dfbe42c7838e68c42\"\u003e\u003ccode\u003e8f886ff\u003c/code\u003e\u003c/a\u003e release: 2.68.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/df4ec02a1b4bfc50f6218908fe497dd0ec566801\"\u003e\u003ccode\u003edf4ec02\u003c/code\u003e\u003c/a\u003e fix(logs): Don't stop sending auto-collected logs when \u003ccode\u003eenable_logs=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e32031816394208bce58c050ff563bfde8d7b228\"\u003e\u003ccode\u003ee320318\u003c/code\u003e\u003c/a\u003e test(pyramid): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7218\"\u003e#7218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/7b8a3857122d0a9c69aca784bd730bb0dcf729f6\"\u003e\u003ccode\u003e7b8a385\u003c/code\u003e\u003c/a\u003e test(bottle): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7217\"\u003e#7217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/cbcadc9cba1295fb78a90a2823d6fbd36bce1ba3\"\u003e\u003ccode\u003ecbcadc9\u003c/code\u003e\u003c/a\u003e test(sanic): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7216\"\u003e#7216\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e42c798e0cd549b42bc748a53c7e16c2763ec427\"\u003e\u003ccode\u003ee42c798\u003c/code\u003e\u003c/a\u003e feat(tornado): Gate request body collection on data_collection option (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7215\"\u003e#7215\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/d05bb60e0d9ecc66b2cc8b62ba0cfc0eaa343088\"\u003e\u003ccode\u003ed05bb60\u003c/code\u003e\u003c/a\u003e test(django): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7213\"\u003e#7213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/bcce67b1a6869229a0c74bcd93e4b8bcfde5cc7a\"\u003e\u003ccode\u003ebcce67b\u003c/code\u003e\u003c/a\u003e feat(wsgi): Gate request body collection on data_collection option (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7212\"\u003e#7212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/41220c4adba83c307aabae28057db830808adb3a\"\u003e\u003ccode\u003e41220c4\u003c/code\u003e\u003c/a\u003e fix(google_genai): Gate streaming \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, no...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.66.1...2.68.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.7 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.7...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field\u003c/code\u003e corrupting concatenated keys (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/02a46831ceb213421761f312e1368fa7b7e796d9\"\u003e\u003ccode\u003e02a4683\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etestcase_databases\u003c/code\u003e mapping of \u003ccode\u003emulti_db = False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/bc85eb958b63b752cbd7454d6378e51ca50d891d\"\u003e\u003ccode\u003ebc85eb9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_decorators\u003c/code\u003e hoisting values above their definitions (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/4eb5abf3734ba10c96dd53abdf98e50c78c4adae\"\u003e\u003ccode\u003e4eb5abf\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_register\u003c/code\u003e referencing models defined after the admin class (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d782084a4fe43286d6b4b2d11676efad0a1356cb\"\u003e\u003ccode\u003ed782084\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003esettings_storages\u003c/code\u003e erasing settings referenced elsewhere (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/2f3eb7571f87ae8c62389ac8f977935f81fbe58e\"\u003e\u003ccode\u003e2f3eb75\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etest_http_headers\u003c/code\u003e precedence when merging into \u003ccode\u003eheaders=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d750615a98098ff0c44477041932a04089d5aa47\"\u003e\u003ccode\u003ed750615\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003estringagg\u003c/code\u003e moving import despite bare \u003ccode\u003eStringAgg\u003c/code\u003e references (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/49cb8b9c2297d329a8f858beb54fb34e7274830a\"\u003e\u003ccode\u003e49cb8b9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eutils_timezone\u003c/code\u003e matching aliased \u003ccode\u003eutc\u003c/code\u003e imports (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-upgrade/compare/1.31.1...1.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframe...\n\n_Description has been truncated_","html_url":"https://github.com/mpeyfuss/drf-template/pull/22","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpeyfuss%2Fdrf-template/issues/22","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/22/packages"}},{"old_version":"6.0.7","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-09-03T22:50:28.000Z","version_change":"6.0.7 → 6.1.0","issue":{"uuid":"5342228020","node_id":"PR_kwDOTbcjQc8AAAABCIBcdQ","number":42,"state":"closed","title":"build(deps): bump the python group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T22:47:41.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-03T22:50:28.000Z","updated_at":"2026-09-04T22:47:42.000Z","time_to_close":86233,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python","update_count":16,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.2.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"psycopg","old_version":"3.3.4","new_version":"3.3.5"},{"name":"sentry-sdk","old_version":"2.66.1","new_version":"2.68.1","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"uvicorn","old_version":"0.52.0","new_version":"0.52.4"},{"name":"coverage","old_version":"7.15.2","new_version":"7.16.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djlint","old_version":"1.43.1","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.1","new_version":"0.16.5","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.2.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [psycopg[c]](https://github.com/psycopg/psycopg) | `3.3.4` | `3.3.5` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.66.1` | `2.68.1` |\n| [uvicorn[standard]](https://github.com/Kludex/uvicorn) | `0.52.0` | `0.52.4` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.2` | `7.16.0` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.43.1` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.1` | `0.16.5` |\n\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.2.0\u003c/h2\u003e\n\u003cp\u003eCleartext HTTP/2 lands, and an HTTP/2 security fix.\u003c/p\u003e\n\u003ch2\u003eCleartext HTTP/2 (h2c)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp2_cleartext\u003c/code\u003e accepts \u003ccode\u003eprior-knowledge\u003c/code\u003e, \u003ccode\u003eupgrade\u003c/code\u003e, \u003ccode\u003eboth\u003c/code\u003e or \u003ccode\u003eoff\u003c/code\u003e (the\ndefault). Prior knowledge serves a connection that opens with the HTTP/2\npreface; \u003ccode\u003eupgrade\u003c/code\u003e honours an HTTP/1.1 \u003ccode\u003eUpgrade: h2c\u003c/code\u003e request. Both work on the\ngthread, gevent and asgi workers.\u003c/p\u003e\n\u003cp\u003eThis is for deployments where TLS is terminated by a proxy that speaks HTTP/2\nupstream, so the hop into gunicorn no longer drops to HTTP/1.1. Only peers in\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e are considered; everyone else is served HTTP/1.x exactly\nas if the setting were off. Each mechanism is enabled separately, so turning one\non does not turn the other on.\u003c/p\u003e\n\u003cp\u003eDo not expose a cleartext HTTP/2 port to the internet.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eHTTP2Request\u003c/code\u003e built its headers straight from the stream, so nothing the HTTP/1\npath enforces applied over HTTP/2: the underscore and \u003ccode\u003eheader_map\u003c/code\u003e policy,\nduplicate \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e, control characters in values, and the\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e trust gate. An untrusted client could set \u003ccode\u003eSCRIPT_NAME\u003c/code\u003e\nand forge \u003ccode\u003eHTTP_*\u003c/code\u003e entries in the WSGI environ, and decide \u003ccode\u003ewsgi.url_scheme\u003c/code\u003e\nthrough \u003ccode\u003e:scheme\u003c/code\u003e. Both request classes now share one policy mixin, and the\nscheme comes from the transport.\u003c/p\u003e\n\u003cp\u003eIf you serve HTTP/2, this is the reason to upgrade.\u003c/p\u003e\n\u003ch2\u003eOther HTTP/2 fixes\u003c/h2\u003e\n\u003cp\u003eWSGI responses were buffered whole before anything was sent; they stream now.\nHEAD, 204 and 304 no longer carry a body. Events read while blocked on a\nflow-control window were discarded, losing requests and body data outright.\n\u003ccode\u003esendfile()\u003c/code\u003e is refused on HTTP/2 responses rather than bypassing framing.\u003c/p\u003e\n\u003ch2\u003eRequest bodies dropped on Upgrade requests\u003c/h2\u003e\n\u003cp\u003eOn the ASGI worker with the fast parser, any request carrying an \u003ccode\u003eUpgrade\u003c/code\u003e\nheader reached the application with an empty body, whatever the header's value\nand with HTTP/2 switched off entirely. Fixed in \u003ccode\u003egunicorn_h1c\u003c/code\u003e 0.6.9, which the\n\u003ccode\u003efast\u003c/code\u003e extra now requires.\u003c/p\u003e\n\u003cp\u003eFull changelog: \u003ca href=\"https://gunicorn.org/news/\"\u003ehttps://gunicorn.org/news/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/36f2a3c1b80dfa41d70859d12c5bfbbdc23a3c38\"\u003e\u003ccode\u003e36f2a3c\u003c/code\u003e\u003c/a\u003e gunicorn 26.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbba3505f423bfb91af3a87e49ed9d232f39a8fe\"\u003e\u003ccode\u003ecbba350\u003c/code\u003e\u003c/a\u003e test: cover the h2c edge paths that had none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/988541112ebcf3f795c020fc394aa7eed75f9f53\"\u003e\u003ccode\u003e9885411\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3703\"\u003e#3703\u003c/a\u003e from cormier/fix-inconsistency-in-control-socket-docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/86f0919806a2d4d4cce376cc2088352e7643b139\"\u003e\u003ccode\u003e86f0919\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3704\"\u003e#3704\u003c/a\u003e from methane/doc-wsgi-h1c\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/585355122efe736946b977c5605e404ff2d6ddd4\"\u003e\u003ccode\u003e5853551\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3712\"\u003e#3712\u003c/a\u003e from Rotzbua/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7bce87e2aa29a4a794eb2b113ff811cad6a80736\"\u003e\u003ccode\u003e7bce87e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3700\"\u003e#3700\u003c/a\u003e from benoitc/fix/sponsor-logo-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/972dfb03b110c430712c32a3d92ef6397ff8eff6\"\u003e\u003ccode\u003e972dfb0\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3690\"\u003e#3690\u003c/a\u003e from melbinjp/docs/contributing-settings-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7b3f16be8d9cc051538b7f0b58b236b37c9550f8\"\u003e\u003ccode\u003e7b3f16b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3711\"\u003e#3711\u003c/a\u003e from benoitc/docs/http2-changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5bf237c0c7ef5bcdc63046645a17d6bafd609a34\"\u003e\u003ccode\u003e5bf237c\u003c/code\u003e\u003c/a\u003e http2: require gunicorn_h1c 0.6.9 and drop the upgrade body workaround\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7cf03385c574228e28c4952fd410ed2df02acc94\"\u003e\u003ccode\u003e7cf0338\u003c/code\u003e\u003c/a\u003e test: skip the fast-parser cases when gunicorn_h1c is absent\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg[c]` from 3.3.4 to 3.3.5\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg/blob/master/docs/news.rst\"\u003epsycopg[c]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. currentmodule:: psycopg\u003c/p\u003e\n\u003cp\u003e.. index::\nsingle: Release notes\nsingle: News\u003c/p\u003e\n\u003ch1\u003e\u003ccode\u003epsycopg\u003c/code\u003e release notes\u003c/h1\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003ePsycopg 3.3.5\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDiscard prepared statements upon :sql:\u003ccode\u003eALTER *\u003c/code\u003e or \u003ccode\u003eDISCARD *\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1307](https://github.com/psycopg/psycopg/issues/1307)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!ProgrammingError\u003c/code\u003e when dumping non-\u003ccode\u003e!None\u003c/code\u003e values with\nno \u003ccode\u003e!NoneType\u003c/code\u003e dumper registered in python implementation (:ticket:\u003ccode\u003e[#1325](https://github.com/psycopg/psycopg/issues/1325)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!wait_selector\u003c/code\u003e wait function to not raise \u003ccode\u003e!KeyError\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1327](https://github.com/psycopg/psycopg/issues/1327)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e!DataError\u003c/code\u003e messages leaking the literal \u003ccode\u003e{...}\u003c/code\u003e placeholder instead\nof the offending value when loading a pre-year-1 :sql:\u003ccode\u003etimestamp\u003c/code\u003e or a\nmalformed binary :sql:\u003ccode\u003ejsonb\u003c/code\u003e value (:ticket:\u003ccode\u003e[#1372](https://github.com/psycopg/psycopg/issues/1372)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e instead of \u003ccode\u003e!ValueError\u003c/code\u003e when \u003ccode\u003e~psycopg.rows.namedtuple_row\u003c/code\u003e\nreceives duplicate column names (:ticket:\u003ccode\u003e[#1348](https://github.com/psycopg/psycopg/issues/1348)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003e!DataError\u003c/code\u003e on inconsistent copy data (:tickets:\u003ccode\u003e[#1359](https://github.com/psycopg/psycopg/issues/1359), [#1360](https://github.com/psycopg/psycopg/issues/1360)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eHandle client encodings aliases (:ticket:\u003ccode\u003e[#1363](https://github.com/psycopg/psycopg/issues/1363)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix building C extension with Cython 3.3.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.4\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix possible spurious connection timeout in systems with very long uptimes\nin C extension (:ticket:\u003ccode\u003e[#1280](https://github.com/psycopg/psycopg/issues/1280)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eFix client-side adaptation of enums whose name require quotes\n(:ticket:\u003ccode\u003e[#1298](https://github.com/psycopg/psycopg/issues/1298)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eConsistently populate \u003ccode\u003e~Cursor.statusmessage\u003c/code\u003e after \u003ccode\u003e~Cursor.executemany()\u003c/code\u003e\n(:ticket:\u003ccode\u003e[#1302](https://github.com/psycopg/psycopg/issues/1302)\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePsycopg 3.3.3\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRetain \u003ccode\u003eError.pgconn\u003c/code\u003e when raising a single exception for multiple connection\nattempt errors (:ticket:\u003ccode\u003e[#1246](https://github.com/psycopg/psycopg/issues/1246)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eReturn a proper error when server sends \u003ccode\u003eErrorResponse\u003c/code\u003e for a \u003ccode\u003eSync\u003c/code\u003e after\na \u003ccode\u003eParse\u003c/code\u003e (:ticket:\u003ccode\u003e[#1260](https://github.com/psycopg/psycopg/issues/1260)\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/psycopg/psycopg/commit/ea542c9534cc9841d50450e0c156b549cc6c805a\"\u003e\u003ccode\u003eea542c9\u003c/code\u003e\u003c/a\u003e chore: bump psycopg package version to 3.3.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/8d31e4711c22b206d8863b9397b3b34f5b106e4d\"\u003e\u003ccode\u003e8d31e47\u003c/code\u003e\u003c/a\u003e chore(deps): bump the actions group across 1 directory with 4 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/268f863e0e8dbdbaf4f10616ebd14ff00edaeb51\"\u003e\u003ccode\u003e268f863\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1370\"\u003e#1370\u003c/a\u003e from Sanjays2402/fix/truncated-binary-copy-error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/a412fa4d682f035a9cf3c7886a5c95c15c64ba96\"\u003e\u003ccode\u003ea412fa4\u003c/code\u003e\u003c/a\u003e docs: put together different issues fixed around copy parsing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/f757307068aef06e439cf164915a3781acf483b5\"\u003e\u003ccode\u003ef757307\u003c/code\u003e\u003c/a\u003e fix: clearer error messages according to truncated copy message part\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/b1f17c44096b8fbc90836d9652d083f23c88e28d\"\u003e\u003ccode\u003eb1f17c4\u003c/code\u003e\u003c/a\u003e test: move existing COPY format parsing tests into a single module\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/21eba573f9356276b2a3e0b7c1d86fad03f2872f\"\u003e\u003ccode\u003e21eba57\u003c/code\u003e\u003c/a\u003e test: drop useless parametrization of copy binary parsigh test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/6780e17bcee0b838dedd0aa9c1b6dcc563a50cec\"\u003e\u003ccode\u003e6780e17\u003c/code\u003e\u003c/a\u003e fix(copy): handle truncated binary row headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/2f2fcfbf35af4b80a4755fff75fe8b8f5e059193\"\u003e\u003ccode\u003e2f2fcfb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg/issues/1364\"\u003e#1364\u003c/a\u003e from DylanYoung/fix_client_encoding_aliases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg/commit/ccc351ec3180969d105199012a017240492a43c0\"\u003e\u003ccode\u003eccc351e\u003c/code\u003e\u003c/a\u003e refactor: don't store the encodings raw table as a dict\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg/compare/3.3.4...3.3.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.66.1 to 2.68.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.1\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eenable_logs\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e(logs) Don't stop sending auto-collected logs when \u003ccode\u003eenable_logs=True\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7237\"\u003e#7237\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIf you have \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e, our logging integrations for the standard library logging module as well as Loguru will auto-collect logs and send them to Sentry as Sentry logs by default, preserving old behavior. Turning automatic collection off for a specific integration can still be achieved using the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration option.\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nenable_logs=True,\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=False),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003ePlease note that the \u003ccode\u003eenable_logs\u003c/code\u003e option is deprecated and will be removed in the next major release. The \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API now works regardless of it, and auto-collection can be opted into via the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration-level options, which are \u003ccode\u003eFalse\u003c/code\u003e by default, unless you have \u003ccode\u003eenable_logs=True\u003c/code\u003e. We've added this compatibility layer to make the transition to a \u003ccode\u003eenable_logs\u003c/code\u003e-free world easier.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Add \u003ccode\u003efailed_request_status_codes\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7140\"\u003e#7140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(anthropic) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7207\"\u003e#7207\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(google_genai) Gate streaming \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7210\"\u003e#7210\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langchain) Use \u003ccode\u003egen_ai.tool.definitions\u003c/code\u003e attribute when data collection is enabled by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7204\"\u003e#7204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langgraph,huggingface_hub) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7208\"\u003e#7208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7205\"\u003e#7205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai_agents) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7209\"\u003e#7209\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003c/code\u003e\u003c/pre\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/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.1\u003c/h2\u003e\n\u003ch3\u003e\u003ccode\u003eenable_logs\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e(logs) Don't stop sending auto-collected logs when \u003ccode\u003eenable_logs=True\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7237\"\u003e#7237\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIf you have \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e, our logging integrations for the standard library logging module as well as Loguru will auto-collect logs and send them to Sentry as Sentry logs by default, preserving old behavior. Turning automatic collection off for a specific integration can still be achieved using the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration option.\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nenable_logs=True,\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=False),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003ePlease note that the \u003ccode\u003eenable_logs\u003c/code\u003e option is deprecated and will be removed in the next major release. The \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API now works regardless of it, and auto-collection can be opted into via the \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e integration-level options, which are \u003ccode\u003eFalse\u003c/code\u003e by default, unless you have \u003ccode\u003eenable_logs=True\u003c/code\u003e. We've added this compatibility layer to make the transition to a \u003ccode\u003eenable_logs\u003c/code\u003e-free world easier.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Add \u003ccode\u003efailed_request_status_codes\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7140\"\u003e#7140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(anthropic) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7207\"\u003e#7207\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(google_genai) Gate streaming \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7210\"\u003e#7210\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langchain) Use \u003ccode\u003egen_ai.tool.definitions\u003c/code\u003e attribute when data collection is enabled by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7204\"\u003e#7204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(langgraph,huggingface_hub) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7208\"\u003e#7208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7205\"\u003e#7205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(openai_agents) Gate \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, not inputs by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7209\"\u003e#7209\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003e\u003c/code\u003e\u003c/pre\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/getsentry/sentry-python/commit/98f7d91809e71ed5a7b827f8b4f9acfc7ac1bae0\"\u003e\u003ccode\u003e98f7d91\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/8f886ff9b784da7c45f51a0dfbe42c7838e68c42\"\u003e\u003ccode\u003e8f886ff\u003c/code\u003e\u003c/a\u003e release: 2.68.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/df4ec02a1b4bfc50f6218908fe497dd0ec566801\"\u003e\u003ccode\u003edf4ec02\u003c/code\u003e\u003c/a\u003e fix(logs): Don't stop sending auto-collected logs when \u003ccode\u003eenable_logs=True\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e32031816394208bce58c050ff563bfde8d7b228\"\u003e\u003ccode\u003ee320318\u003c/code\u003e\u003c/a\u003e test(pyramid): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7218\"\u003e#7218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/7b8a3857122d0a9c69aca784bd730bb0dcf729f6\"\u003e\u003ccode\u003e7b8a385\u003c/code\u003e\u003c/a\u003e test(bottle): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7217\"\u003e#7217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/cbcadc9cba1295fb78a90a2823d6fbd36bce1ba3\"\u003e\u003ccode\u003ecbcadc9\u003c/code\u003e\u003c/a\u003e test(sanic): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7216\"\u003e#7216\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e42c798e0cd549b42bc748a53c7e16c2763ec427\"\u003e\u003ccode\u003ee42c798\u003c/code\u003e\u003c/a\u003e feat(tornado): Gate request body collection on data_collection option (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7215\"\u003e#7215\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/d05bb60e0d9ecc66b2cc8b62ba0cfc0eaa343088\"\u003e\u003ccode\u003ed05bb60\u003c/code\u003e\u003c/a\u003e test(django): Add tests for data_collection gating of request body (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7213\"\u003e#7213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/bcce67b1a6869229a0c74bcd93e4b8bcfde5cc7a\"\u003e\u003ccode\u003ebcce67b\u003c/code\u003e\u003c/a\u003e feat(wsgi): Gate request body collection on data_collection option (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7212\"\u003e#7212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/41220c4adba83c307aabae28057db830808adb3a\"\u003e\u003ccode\u003e41220c4\u003c/code\u003e\u003c/a\u003e fix(google_genai): Gate streaming \u003ccode\u003egen_ai.response.tool_calls\u003c/code\u003e on outputs, no...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.66.1...2.68.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn[standard]` from 0.52.0 to 0.52.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn[standard]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.52.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComplete the closing handshake on server-initiated WebSocket closes in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e and \u003ccode\u003ewsproto\u003c/code\u003e implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing write flow control to the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, preventing data truncation on server-initiated closes with large in-flight payloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3048\"\u003e#3048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle connection loss while a WebSocket write is waiting on backpressure (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3050\"\u003e#3050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eContent-Type\u003c/code\u003e and \u003ccode\u003eContent-Length\u003c/code\u003e headers from WebSocket denial responses on the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, and deliver non-UTF-8 denial bodies intact (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3041\"\u003e#3041\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.0...0.52.1\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.0...0.52.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn[standard]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.52.4 (August 18, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.3 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.2 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.1 (August 1, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComplete the closing handshake on server-initiated WebSocket closes in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e and \u003ccode\u003ewsproto\u003c/code\u003e implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing write flow control to the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, preventing data truncation on server-initiated closes with large in-flight payloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3048\"\u003e#3048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle connection loss while a WebSocket write is waiting on backpressure (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3050\"\u003e#3050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eContent-Type\u003c/code\u003e and \u003ccode\u003eContent-Length\u003c/code\u003e headers from WebSocket denial responses on the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, and deliver non-UTF-8 denial bodies intact (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3041\"\u003e#3041\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/8988c23704fc373c9206cca53ec57dd8ad7f44a5\"\u003e\u003ccode\u003e8988c23\u003c/code\u003e\u003c/a\u003e Stabilize macOS Python 3.13 signal shutdown tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3084\"\u003e#3084\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/898ddca9254b53c5bf7a6ee509756704caaa949f\"\u003e\u003ccode\u003e898ddca\u003c/code\u003e\u003c/a\u003e Update PyPI publish action to version 1.14.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3083\"\u003e#3083\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3869f8aac2bdd040fa3fbe564e1dad67e2637641\"\u003e\u003ccode\u003e3869f8a\u003c/code\u003e\u003c/a\u003e Restore Mermaid diagram rendering (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3080\"\u003e#3080\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/64148a9c574e1eb87d3d09b3ce4c256606f8d973\"\u003e\u003ccode\u003e64148a9\u003c/code\u003e\u003c/a\u003e Version 0.52.4 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3079\"\u003e#3079\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9e9e5691bd14d5c4cd66d9bd76c7730bc48461a2\"\u003e\u003ccode\u003e9e9e569\u003c/code\u003e\u003c/a\u003e docs: correct release example PR number (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3072\"\u003e#3072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b783dacab50b9d6767b0cf65826b2dc3aae21909\"\u003e\u003ccode\u003eb783dac\u003c/code\u003e\u003c/a\u003e Remove duplicate Date header from SansIO WebSocket handshakes (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/27019b2a4b1fa6d68a289fcf7d738fbdc6ee4e5d\"\u003e\u003ccode\u003e27019b2\u003c/code\u003e\u003c/a\u003e chore(deps): bump the python-packages group across 1 directory with 11 update...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1b6427311bb84a15addee688f6d41d96e33f8b0a\"\u003e\u003ccode\u003e1b64273\u003c/code\u003e\u003c/a\u003e Fix a typo in index.md (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3006\"\u003e#3006\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a68da608147c5f79d962352dce11de8f6e32d972\"\u003e\u003ccode\u003ea68da60\u003c/code\u003e\u003c/a\u003e Version 0.52.3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3068\"\u003e#3068\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/6e3bb4c5c22531c16d341f2da49f2653307f412f\"\u003e\u003ccode\u003e6e3bb4c\u003c/code\u003e\u003c/a\u003e Use zttp 0.0.24 fast receive path (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.0...0.52.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.2 to 7.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.16.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen combining files, now path separator slashes will automatically be converted to the local file system style. This makes it less necessary to define \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003eissue 2266\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ca href=\"https://coverage.readthedocs.io/en/latest/api_coverage.html#coverage.Coverage.switch_context\"\u003eCoverage.switch_context()\u003c/a\u003e method now returns the previous context.\u003c/li\u003e\n\u003cli\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file path when it was only meant to be replaced once, in the leading portion of the path. This is now fixed, in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003epull 2268\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixes to validation of options and configuration settings:\n\u003cul\u003e\n\u003cli\u003eNegative precision settings now always cause useful error messages (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003epull 2261\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing “Couldn’t use data file …: user-defined function raised exception” error. Now it raises a proper configuration error naming the bad regex, like other regex settings do (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003epull 2262\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eNon-string values in TOML configuration settings now produce a helpful error message instead of a traceback. This affects list settings whose elements aren’t strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e entry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the \u003ccode\u003e[paths]\u003c/code\u003e section (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003epull 2263\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like \u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can’t reach the subprocesses. The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as the entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e slipped through and failed later with “Can’t combine statement coverage data with branch data”. Each named concurrency library is now properly considered (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2270\"\u003epull 2270\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any measured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on Windows. The original extension is now restored on the annotated copy (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003epull 2265\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.16.0\"\u003ecoverage 7.16.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.16.0\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWhen combining files, now path separator slashes will automatically be\nconverted to the local file system style. This makes it less necessary to\ndefine \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems.\nFixes \u003ccode\u003eissue 2266\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe :meth:\u003ccode\u003e.Coverage.switch_context\u003c/code\u003e method now returns the previous context.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file\npath when it was only meant to be replaced once, in the leading portion of\nthe path. This is now fixed, in \u003ccode\u003epull 2268\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixes to validation of options and configuration settings:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNegative precision settings now always cause useful error messages (\u003ccode\u003epull 2261\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing \u0026quot;Couldn't use data file ...:\nuser-defined function raised exception\u0026quot; error. Now it raises a proper\nconfiguration error naming the bad regex, like other regex settings do\n(\u003ccode\u003epull 2262\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNon-string values in TOML configuration settings now produce a helpful\nerror message instead of a traceback.  This affects list settings whose\nelements aren't strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e\nentry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the\n\u003ccode\u003e[paths]\u003c/code\u003e section (\u003ccode\u003epull 2263\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like\n\u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can't\nreach the subprocesses.  The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as\nthe entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e\nslipped through and failed later with \u0026quot;Can't combine statement coverage\ndata with branch data\u0026quot;.  Each named concurrency library is now properly\nconsidered (\u003ccode\u003epull 2270\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any\nmeasured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on\nWindows.  The original extension is now restored on the annotated copy (\u003ccode\u003epull 2265\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2261: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003ecoveragepy/coveragepy#2261\u003c/a\u003e\n.. _pull 2262: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003ecoveragepy/coveragepy#2262\u003c/a\u003e\n.. _pull 2263: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003ecoveragepy/coveragepy#2263\u003c/a\u003e\n.. _pull 2265: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003ecoveragepy/coveragepy#2265\u003c/a\u003e\n.. _issue 2266: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003ecoveragepy/coveragepy#2266\u003c/a\u003e\n.. _pull 2268: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003ecoveragepy/coveragepy#2268\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/coveragepy/coveragepy/commit/3e9fc1653ef31089d02eb7618b9d9ac9414378fc\"\u003e\u003ccode\u003e3e9fc16\u003c/code\u003e\u003c/a\u003e docs: prep for 7.16.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/38be8d13afee6b6525492fc375c739cdfb675e9b\"\u003e\u003ccode\u003e38be8d1\u003c/code\u003e\u003c/a\u003e build: control check-manifest explicitly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/8eb1266ead5c6d356d3437637a509ff86b566253\"\u003e\u003ccode\u003e8eb1266\u003c/code\u003e\u003c/a\u003e docs(build): no longer commit sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1a8b3fa57d56bb70bad62c93d224c18a0fbaae6f\"\u003e\u003ccode\u003e1a8b3fa\u003c/code\u003e\u003c/a\u003e docs: remove sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/aeaa79b812d1bc637ebb5582ab12c076e192c87e\"\u003e\u003ccode\u003eaeaa79b\u003c/code\u003e\u003c/a\u003e docs: linklint is now sphinx-linklint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d5eaf3f6d38f58746bc69e87e64c0b0277a9077d\"\u003e\u003ccode\u003ed5eaf3f\u003c/code\u003e\u003c/a\u003e test: a branchless way to re-add extensions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/57e52fd431cecc1ca03de2c5b1288e0b330c2ef4\"\u003e\u003ccode\u003e57e52fd\u003c/code\u003e\u003c/a\u003e docs: adjust CHANGES for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b9d304d77f7ce3d55df3a46339dbc56d1f49df58\"\u003e\u003ccode\u003eb9d304d\u003c/code\u003e\u003c/a\u003e fix: check for multiprocessing in a --concurrency list (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a6ef9284afbc7d1f392821864b64ddbda0051fc5\"\u003e\u003ccode\u003ea6ef928\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/070461fcfde0437b5b778c2c2a72e433a0a391aa\"\u003e\u003ccode\u003e070461f\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 4 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2271\"\u003e#2271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.2...7.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003cli\u003eImproved cache hit/miss reporting in the Cache panel for \u003ccode\u003ecache.get()\u003c/code\u003e\ncalls with a supplied default value, while documenting the remaining\nambiguity when a cached value equals the supplied default.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)...\n\n_Description has been truncated_","html_url":"https://github.com/tchongwangbakayoko619-star/Plateforme-de-gestion-d-v-nements-universitaires/pull/42","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tchongwangbakayoko619-star%2FPlateforme-de-gestion-d-v-nements-universitaires/issues/42","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/42/packages"}},{"old_version":"6.0.9","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-09-01T21:43:46.000Z","version_change":"6.0.9 → 6.1.0","issue":{"uuid":"5317136079","node_id":"PR_kwDOT1EvT88AAAABBz-G5w","number":16,"state":"closed","title":"Bump the python group across 1 directory with 12 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T21:36:46.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-01T21:43:46.000Z","updated_at":"2026-09-04T21:36:48.000Z","time_to_close":258780,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":12,"packages":[{"name":"django","old_version":"6.0.8","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.19.0","new_version":"65.19.1"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.2.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"coverage","old_version":"7.15.4","new_version":"7.16.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.9","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djangorestframework-stubs","old_version":"3.17.1","new_version":"3.18.1","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.13.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.2","new_version":"0.16.5","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 12 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.8` | `6.1` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.19.0` | `65.19.1` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.2.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.4` | `7.16.0` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.9` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.1` | `3.18.1` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.13.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.2` | `0.16.5` |\n\n\nUpdates `django` from 6.0.8 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.8...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.19.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.2.0\u003c/h2\u003e\n\u003cp\u003eCleartext HTTP/2 lands, and an HTTP/2 security fix.\u003c/p\u003e\n\u003ch2\u003eCleartext HTTP/2 (h2c)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp2_cleartext\u003c/code\u003e accepts \u003ccode\u003eprior-knowledge\u003c/code\u003e, \u003ccode\u003eupgrade\u003c/code\u003e, \u003ccode\u003eboth\u003c/code\u003e or \u003ccode\u003eoff\u003c/code\u003e (the\ndefault). Prior knowledge serves a connection that opens with the HTTP/2\npreface; \u003ccode\u003eupgrade\u003c/code\u003e honours an HTTP/1.1 \u003ccode\u003eUpgrade: h2c\u003c/code\u003e request. Both work on the\ngthread, gevent and asgi workers.\u003c/p\u003e\n\u003cp\u003eThis is for deployments where TLS is terminated by a proxy that speaks HTTP/2\nupstream, so the hop into gunicorn no longer drops to HTTP/1.1. Only peers in\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e are considered; everyone else is served HTTP/1.x exactly\nas if the setting were off. Each mechanism is enabled separately, so turning one\non does not turn the other on.\u003c/p\u003e\n\u003cp\u003eDo not expose a cleartext HTTP/2 port to the internet.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eHTTP2Request\u003c/code\u003e built its headers straight from the stream, so nothing the HTTP/1\npath enforces applied over HTTP/2: the underscore and \u003ccode\u003eheader_map\u003c/code\u003e policy,\nduplicate \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e, control characters in values, and the\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e trust gate. An untrusted client could set \u003ccode\u003eSCRIPT_NAME\u003c/code\u003e\nand forge \u003ccode\u003eHTTP_*\u003c/code\u003e entries in the WSGI environ, and decide \u003ccode\u003ewsgi.url_scheme\u003c/code\u003e\nthrough \u003ccode\u003e:scheme\u003c/code\u003e. Both request classes now share one policy mixin, and the\nscheme comes from the transport.\u003c/p\u003e\n\u003cp\u003eIf you serve HTTP/2, this is the reason to upgrade.\u003c/p\u003e\n\u003ch2\u003eOther HTTP/2 fixes\u003c/h2\u003e\n\u003cp\u003eWSGI responses were buffered whole before anything was sent; they stream now.\nHEAD, 204 and 304 no longer carry a body. Events read while blocked on a\nflow-control window were discarded, losing requests and body data outright.\n\u003ccode\u003esendfile()\u003c/code\u003e is refused on HTTP/2 responses rather than bypassing framing.\u003c/p\u003e\n\u003ch2\u003eRequest bodies dropped on Upgrade requests\u003c/h2\u003e\n\u003cp\u003eOn the ASGI worker with the fast parser, any request carrying an \u003ccode\u003eUpgrade\u003c/code\u003e\nheader reached the application with an empty body, whatever the header's value\nand with HTTP/2 switched off entirely. Fixed in \u003ccode\u003egunicorn_h1c\u003c/code\u003e 0.6.9, which the\n\u003ccode\u003efast\u003c/code\u003e extra now requires.\u003c/p\u003e\n\u003cp\u003eFull changelog: \u003ca href=\"https://gunicorn.org/news/\"\u003ehttps://gunicorn.org/news/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/36f2a3c1b80dfa41d70859d12c5bfbbdc23a3c38\"\u003e\u003ccode\u003e36f2a3c\u003c/code\u003e\u003c/a\u003e gunicorn 26.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbba3505f423bfb91af3a87e49ed9d232f39a8fe\"\u003e\u003ccode\u003ecbba350\u003c/code\u003e\u003c/a\u003e test: cover the h2c edge paths that had none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/988541112ebcf3f795c020fc394aa7eed75f9f53\"\u003e\u003ccode\u003e9885411\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3703\"\u003e#3703\u003c/a\u003e from cormier/fix-inconsistency-in-control-socket-docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/86f0919806a2d4d4cce376cc2088352e7643b139\"\u003e\u003ccode\u003e86f0919\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3704\"\u003e#3704\u003c/a\u003e from methane/doc-wsgi-h1c\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/585355122efe736946b977c5605e404ff2d6ddd4\"\u003e\u003ccode\u003e5853551\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3712\"\u003e#3712\u003c/a\u003e from Rotzbua/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7bce87e2aa29a4a794eb2b113ff811cad6a80736\"\u003e\u003ccode\u003e7bce87e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3700\"\u003e#3700\u003c/a\u003e from benoitc/fix/sponsor-logo-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/972dfb03b110c430712c32a3d92ef6397ff8eff6\"\u003e\u003ccode\u003e972dfb0\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3690\"\u003e#3690\u003c/a\u003e from melbinjp/docs/contributing-settings-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7b3f16be8d9cc051538b7f0b58b236b37c9550f8\"\u003e\u003ccode\u003e7b3f16b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3711\"\u003e#3711\u003c/a\u003e from benoitc/docs/http2-changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5bf237c0c7ef5bcdc63046645a17d6bafd609a34\"\u003e\u003ccode\u003e5bf237c\u003c/code\u003e\u003c/a\u003e http2: require gunicorn_h1c 0.6.9 and drop the upgrade body workaround\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7cf03385c574228e28c4952fd410ed2df02acc94\"\u003e\u003ccode\u003e7cf0338\u003c/code\u003e\u003c/a\u003e test: skip the fast-parser cases when gunicorn_h1c is absent\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.4 to 7.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.16.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen combining files, now path separator slashes will automatically be converted to the local file system style. This makes it less necessary to define \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003eissue 2266\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ca href=\"https://coverage.readthedocs.io/en/latest/api_coverage.html#coverage.Coverage.switch_context\"\u003eCoverage.switch_context()\u003c/a\u003e method now returns the previous context.\u003c/li\u003e\n\u003cli\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file path when it was only meant to be replaced once, in the leading portion of the path. This is now fixed, in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003epull 2268\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixes to validation of options and configuration settings:\n\u003cul\u003e\n\u003cli\u003eNegative precision settings now always cause useful error messages (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003epull 2261\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing “Couldn’t use data file …: user-defined function raised exception” error. Now it raises a proper configuration error naming the bad regex, like other regex settings do (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003epull 2262\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eNon-string values in TOML configuration settings now produce a helpful error message instead of a traceback. This affects list settings whose elements aren’t strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e entry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the \u003ccode\u003e[paths]\u003c/code\u003e section (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003epull 2263\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like \u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can’t reach the subprocesses. The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as the entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e slipped through and failed later with “Can’t combine statement coverage data with branch data”. Each named concurrency library is now properly considered (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2270\"\u003epull 2270\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any measured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on Windows. The original extension is now restored on the annotated copy (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003epull 2265\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.16.0\"\u003ecoverage 7.16.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.16.0\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWhen combining files, now path separator slashes will automatically be\nconverted to the local file system style. This makes it less necessary to\ndefine \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems.\nFixes \u003ccode\u003eissue 2266\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe :meth:\u003ccode\u003e.Coverage.switch_context\u003c/code\u003e method now returns the previous context.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file\npath when it was only meant to be replaced once, in the leading portion of\nthe path. This is now fixed, in \u003ccode\u003epull 2268\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixes to validation of options and configuration settings:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNegative precision settings now always cause useful error messages (\u003ccode\u003epull 2261\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing \u0026quot;Couldn't use data file ...:\nuser-defined function raised exception\u0026quot; error. Now it raises a proper\nconfiguration error naming the bad regex, like other regex settings do\n(\u003ccode\u003epull 2262\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNon-string values in TOML configuration settings now produce a helpful\nerror message instead of a traceback.  This affects list settings whose\nelements aren't strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e\nentry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the\n\u003ccode\u003e[paths]\u003c/code\u003e section (\u003ccode\u003epull 2263\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like\n\u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can't\nreach the subprocesses.  The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as\nthe entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e\nslipped through and failed later with \u0026quot;Can't combine statement coverage\ndata with branch data\u0026quot;.  Each named concurrency library is now properly\nconsidered (\u003ccode\u003epull 2270\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any\nmeasured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on\nWindows.  The original extension is now restored on the annotated copy (\u003ccode\u003epull 2265\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2261: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003ecoveragepy/coveragepy#2261\u003c/a\u003e\n.. _pull 2262: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003ecoveragepy/coveragepy#2262\u003c/a\u003e\n.. _pull 2263: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003ecoveragepy/coveragepy#2263\u003c/a\u003e\n.. _pull 2265: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003ecoveragepy/coveragepy#2265\u003c/a\u003e\n.. _issue 2266: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003ecoveragepy/coveragepy#2266\u003c/a\u003e\n.. _pull 2268: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003ecoveragepy/coveragepy#2268\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/coveragepy/coveragepy/commit/3e9fc1653ef31089d02eb7618b9d9ac9414378fc\"\u003e\u003ccode\u003e3e9fc16\u003c/code\u003e\u003c/a\u003e docs: prep for 7.16.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/38be8d13afee6b6525492fc375c739cdfb675e9b\"\u003e\u003ccode\u003e38be8d1\u003c/code\u003e\u003c/a\u003e build: control check-manifest explicitly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/8eb1266ead5c6d356d3437637a509ff86b566253\"\u003e\u003ccode\u003e8eb1266\u003c/code\u003e\u003c/a\u003e docs(build): no longer commit sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1a8b3fa57d56bb70bad62c93d224c18a0fbaae6f\"\u003e\u003ccode\u003e1a8b3fa\u003c/code\u003e\u003c/a\u003e docs: remove sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/aeaa79b812d1bc637ebb5582ab12c076e192c87e\"\u003e\u003ccode\u003eaeaa79b\u003c/code\u003e\u003c/a\u003e docs: linklint is now sphinx-linklint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d5eaf3f6d38f58746bc69e87e64c0b0277a9077d\"\u003e\u003ccode\u003ed5eaf3f\u003c/code\u003e\u003c/a\u003e test: a branchless way to re-add extensions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/57e52fd431cecc1ca03de2c5b1288e0b330c2ef4\"\u003e\u003ccode\u003e57e52fd\u003c/code\u003e\u003c/a\u003e docs: adjust CHANGES for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b9d304d77f7ce3d55df3a46339dbc56d1f49df58\"\u003e\u003ccode\u003eb9d304d\u003c/code\u003e\u003c/a\u003e fix: check for multiprocessing in a --concurrency list (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a6ef9284afbc7d1f392821864b64ddbda0051fc5\"\u003e\u003ccode\u003ea6ef928\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/070461fcfde0437b5b778c2c2a72e433a0a391aa\"\u003e\u003ccode\u003e070461f\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 4 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2271\"\u003e#2271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.4...7.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003cli\u003eImproved cache hit/miss reporting in the Cache panel for \u003ccode\u003ecache.get()\u003c/code\u003e\ncalls with a supplied default value, while documenting the remaining\nambiguity when a cached value equals the supplied default.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.9 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field\u003c/code\u003e corrupting concatenated keys (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/02a46831ceb213421761f312e1368fa7b7e796d9\"\u003e\u003ccode\u003e02a4683\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etestcase_databases\u003c/code\u003e mapping of \u003ccode\u003emulti_db = False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/bc85eb958b63b752cbd7454d6378e51ca50d891d\"\u003e\u003ccode\u003ebc85eb9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_decorators\u003c/code\u003e hoisting values above their definitions (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/4eb5abf3734ba10c96dd53abdf98e50c78c4adae\"\u003e\u003ccode\u003e4eb5abf\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_register\u003c/code\u003e referencing models defined after the admin class (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d782084a4fe43286d6b4b2d11676efad0a1356cb\"\u003e\u003ccode\u003ed782084\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003esettings_storages\u003c/code\u003e erasing settings referenced elsewhere (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/2f3eb7571f87ae8c62389ac8f977935f81fbe58e\"\u003e\u003ccode\u003e2f3eb75\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etest_http_headers\u003c/code\u003e precedence when merging into \u003ccode\u003eheaders=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d750615a98098ff0c44477041932a04089d5aa47\"\u003e\u003ccode\u003ed750615\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003estringagg\u003c/code\u003e moving import despite bare \u003ccode\u003eStringAgg\u003c/code\u003e references (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/49cb8b9c2297d329a8f858beb54fb34e7274830a\"\u003e\u003ccode\u003e49cb8b9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eutils_timezone\u003c/code\u003e matching aliased \u003ccode\u003eutc\u003c/code\u003e imports (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-upgrade/compare/1.31.1...1.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework-stubs` from 3.17.1 to 3.18.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/releases\"\u003edjangorestframework-stubs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.1\u003c/h2\u003e\n\u003cp\u003eThis release dropped Python 3.10 support, following django-stubs upstream (requires Python 3.11+ now).\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMark stub-only synthetic types with \u003ccode\u003e@type_check_only\u003c/code\u003e by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1038\"\u003etypeddjango/djangorestframework-stubs#1038\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ePrimaryKeyRelatedField\u003c/code\u003e \u003ccode\u003epk_field\u003c/code\u003e attribute \u0026amp; parameter type by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1047\"\u003etypeddjango/djangorestframework-stubs#1047\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eManyRelatedField\u003c/code\u003e type parameters \u0026amp; relation field \u003ccode\u003edefault\u003c/code\u003e/\u003ccode\u003einitial\u003c/code\u003e types by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1049\"\u003etypeddjango/djangorestframework-stubs#1049\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eHousekeeping\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Python 3.10 support by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1035\"\u003etypeddjango/djangorestframework-stubs#1035\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCleanup Python 3.10 compatibility by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1036\"\u003etypeddjango/djangorestframework-stubs#1036\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCategorize stubtest allowlist_todo.txt entries by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1037\"\u003etypeddjango/djangorestframework-stubs#1037\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix remaining items in stubtest \u003ccode\u003eallowlist_todo.txt\u003c/code\u003e and remove the file by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1039\"\u003etypeddjango/djangorestframework-stubs#1039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 3.18.1 release by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1050\"\u003etypeddjango/djangorestframework-stubs#1050\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/compare/3.18.0...3.18.1\"\u003ehttps://github.com/typeddjango/djangorestframework-stubs/compare/3.18.0...3.18.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThis is the first version to be based on DRF 3.18\u003c/li\u003e\n\u003cli\u003eThis is the last version to support \u003ccode\u003edjango-stubs\u003c/code\u003e 6.0.x - next release will require 6.1.x\u003c/li\u003e\n\u003cli\u003eThis is the last version to support Python 3.10 - following django-stubs upstream\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop obsolete coreapi/coreschema from stubs (removed in DRF 3.17) by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1025\"\u003etypeddjango/djangorestframework-stubs#1025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate stubs for djangorestframework 3.18.0 by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1030\"\u003etypeddjango/djangorestframework-stubs#1030\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eHousekeeping\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUnlock django-stubs dev dependency pinning in pyproject.toml by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1033\"\u003etypeddjango/djangorestframework-stubs#1033\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 3.18.0 release by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1034\"\u003etypeddjango/djangorestframework-stubs#1034\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/compare/3.17.1...3.18.0\"\u003ehttps://github.com/typeddjango/djangorestframework-stubs/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/11062a8e197e9b003e0b1d1a63a930bf0ceed2c0\"\u003e\u003ccode\u003e11062a8\u003c/code\u003e\u003c/a\u003e Version 3.18.1 release (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1050\"\u003e#1050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/1d74beaf94c86427d4fe0f9269c46e1457881cfa\"\u003e\u003ccode\u003e1d74bea\u003c/code\u003e\u003c/a\u003e Lock file maintenance\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/fd11a58c5cecad38202d3b89c030182ab89596dd\"\u003e\u003ccode\u003efd11a58\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eManyRelatedField\u003c/code\u003e type parameters \u0026amp; relation field \u003ccode\u003edefault\u003c/code\u003e/\u003ccode\u003einitial\u003c/code\u003e t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/fd549233349d09f98979e57812072e8909309b65\"\u003e\u003ccode\u003efd54923\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ePrimaryKeyRelatedField\u003c/code\u003e \u003ccode\u003epk_field\u003c/code\u003e attribute \u0026amp; parameter type (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1047\"\u003e#1047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/33361020c2aecfee710c5a4e6c25dbf6d8603314\"\u003e\u003ccode\u003e3336102\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/e4c9d11557dacb19a3e34791e9c7908397fe318e\"\u003e\u003ccode\u003ee4c9d11\u003c/code\u003e\u003c/a\u003e Lock file maintenance\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/3410442d566a2d6ae8058b2881fb2adbf86c259a\"\u003e\u003ccode\u003e3410442\u003c/code\u003e\u003c/a\u003e Bump sqlparse from 0.5.5 to 0.6.0 (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1042\"\u003e#1042\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/36692fc5a7ee1c87df369c1dc64c84ea9879b4c7\"\u003e\u003ccode\u003e36692fc\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1041\"\u003e#1041\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/5247f84db1b5e2b47abc736b0164f4fc4cf58f72\"\u003e\u003ccode\u003e5247f84\u003c/code\u003e\u003c/a\u003e Update astral-sh/setup-uv action to v10.0.1 (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/603aa1241e8175cc1cfbc1ade9020b047a9cae2d\"\u003e\u003ccode\u003e603aa12\u003c/code\u003e\u003c/a\u003e Fix remaining items in stubtest \u003ccode\u003eallowlist_todo.txt\u003c/code\u003e and remove the file (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1039\"\u003e#1039\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/compare/3.17.1...3.18.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.3.0 to 2.3.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch3\u003eMypy 2.3.1\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix mypyc crash on double yielding Iterators (Daniël van Noord, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21826\"\u003e21826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix mypyc \u003ccode\u003edefault_factory\u003c/code\u003e for inherited dataclass (Daniël van Noord, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21785\"\u003e21785\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClear mypyc coroutine env on coroutine completion (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21734\"\u003e21734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash when unpacking return value from overload (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21830\"\u003e21830\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAcknowledgements\u003c/h3\u003e\n\u003cp\u003eThanks to all mypy contributors who contributed to this release:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAgriya Khetarpal\u003c/li\u003e\n\u003cli\u003eEthan Sarp\u003c/li\u003e\n\u003cli\u003eIvan Levkivskyi\u003c/li\u003e\n\u003cli\u003eJingchen Ye\u003c/li\u003e\n\u003cli\u003eJukka Lehtosalo\u003c/li\u003e\n\u003cli\u003ePiotr Sawicki\u003c/li\u003e\n\u003cli\u003eShantanu\u003c/li\u003e\n\u003cli\u003eTom Bannink\u003c/li\u003e\n\u003cli\u003eViktor Szépe\u003c/li\u003e\n\u003cli\u003eygale\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eI'd also like to thank my employer, Dropbox, for supporting mypy development.\u003c/p\u003e\n\u003ch2\u003eMypy 2.2\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.2.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eSupport for Closed TypedDicts (PEP 728)\u003c/h3\u003e\n\u003cp\u003eMypy now supports closed TypedDicts as specified in PEP 728. A closed TypedDict cannot have extra\nkeys beyond those explicitly defined. This allows the type checker to determine that certain\noperations are safe when they otherwise wouldn't be due to the potential presence of unknown keys.\u003c/p\u003e\n\u003cp\u003eYou can use the \u003ccode\u003eclosed\u003c/code\u003e keyword argument with \u003ccode\u003eTypedDict\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eHasName = TypedDict(\u0026quot;HasName\u0026quot;, {\u0026quot;name\u0026quot;: str})\nHasOnlyName = TypedDict(\u0026quot;HasOnlyName\u0026quot;, {\u0026quot;name\u0026quot;: str}, closed=True)\nMovie = TypedDict(\u0026quot;Movie\u0026quot;, {\u0026quot;name\u0026quot;: str, \u0026quot;year\u0026quot;: int})\n\u003cp\u003emovie: Movie = {\u0026quot;name\u0026quot;: \u0026quot;Nimona\u0026quot;, \u0026quot;year\u0026quot;: 2023}\nhas_name: HasName = movie  # OK: HasName is open (default)\nhas_only_name: HasOnlyName = movie  # Error: HasOnlyName is closed and Movie has extra \u0026quot;year\u0026quot; key\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/d642c4478e9e3acbe9233edbe17ffc569a1a778c\"\u003e\u003ccode\u003ed642c44\u003c/code\u003e\u003c/a\u003e Bump version to 2.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a39242983d3c2cb85886a1eb6d5869180672784c\"\u003e\u003ccode\u003ea392429\u003c/code\u003e\u003c/a\u003e [mypyc] Fix crash on double yielding Iterators (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21826\"\u003e#21826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4843e7773e7dc8fe3f1fd1319277d6d11cd6cdb3\"\u003e\u003ccode\u003e4843e77\u003c/code\u003e\u003c/a\u003e [mypyc] Fix \u003ccode\u003edefault_factory\u003c/code\u003e for inherited dataclass (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21785\"\u003e#21785\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/14f5df93ed8d1be4f4cc9c447eb2e6e619362e05\"\u003e\u003ccode\u003e14f5df9\u003c/code\u003e\u003c/a\u003e [mypyc] Clear coroutine env on coroutine completion (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21734\"\u003e#21734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/6dfa06dda6e34912279e498d35a43ba6dc30bfee\"\u003e\u003ccode\u003e6dfa06d\u003c/code\u003e\u003c/a\u003e Fix crash when unpacking return value from overload (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21830\"\u003e#21830\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a3857467da126d28b55724e8bb682019df9a503e\"\u003e\u003ccode\u003ea385746\u003c/code\u003e\u003c/a\u003e Bump version to 2.3.1+dev\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python/mypy/compare/v2.3.0...v2.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.6.1 to 4.6.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.6.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks that contain \u003ccode\u003e\u0026quot;scripts\u0026quot;: {\u0026quot;build\u0026quot;: ...}\u003c/code\u003e with\nnpm 11.x.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3737\"\u003e#3737\u003c/a\u003e issue by \u003ca href=\"https://github.com/mheiges\"\u003e\u003ccode\u003e@​mheiges\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.6.2 - 2026-08-10\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks that contain \u003ccode\u003e\u0026quot;scripts\u0026quot;: {\u0026quot;build\u0026quot;: ...}\u003c/code\u003e with\nnpm 11.x.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3737\"\u003e#3737\u003c/a\u003e issue by \u003ca href=\"https://github.com/mheiges\"\u003e\u003ccode\u003e@​mheiges\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9767b6c8211a6bf683875a0afcf2b390457a4b66\"\u003e\u003ccode\u003e9767b6c\u003c/code\u003e\u003c/a\u003e v4.6.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/42ee3ff5ac1cae639613c9ad002d0502ae82384f\"\u003e\u003ccode\u003e42ee3ff\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e from pre-commit/npm-build-scripts-11-x\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/30566198cb2d05201625f92b660a34c38ffe2dc7\"\u003e\u003ccode\u003e3056619\u003c/code\u003e\u003c/a\u003e fix \u003ccode\u003elanguage: node\u003c/code\u003e for hooks with build scripts and npm 11.x\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.6.1...v4.6.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-django` from 4.13.0 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/pytest-dev/pytest-django/releases\"\u003epytest-django's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.14.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pytest-django.readthedocs.io/en/stable/changelog.html#v4-14-0-2026-08-10\"\u003ehttps://pytest-django.readthedocs.io/en/stable/changelog.html#v4-14-0-2026-08-10\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/pytest-dev/pytest-django/blob/main/docs/changelog.rst\"\u003epytest-django's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.14.0 (2026-08-10)\u003c/h2\u003e\n\u003cp\u003eCompatibility\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRestored (unofficial) support for Django 5.0 and Django 5.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eImprovements\n^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a \u003ccode\u003edjango\u003c/code\u003e extra to the package. By depending on this extra\n(e.g. \u003ccode\u003epip install pytest-django[django]\u003c/code\u003e), the dependency resolver\nwill ensure you get a version of pytest-django that is compatible with\nyour version of Django (lower bound only). At least from now on...\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/pytest-dev/pytest-django/commit/1a6b6121c7f1f20e2a32c5f1ece7b6671160b968\"\u003e\u003ccode\u003e1a6b612\u003c/code\u003e\u003c/a\u003e Release 4.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/fffb11d199a4f59e5acec5cb42a8ca257ce987e2\"\u003e\u003ccode\u003efffb11d\u003c/code\u003e\u003c/a\u003e docs: remove $ for consistency\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/e8c0606c3871db20f2273bd700c8a51337205622\"\u003e\u003ccode\u003ee8c0606\u003c/code\u003e\u003c/a\u003e docs: move the \u003ccode\u003edjango\u003c/code\u003e extra explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/b66deb68fd5820a763005b5e689821737031524a\"\u003e\u003ccode\u003eb66deb6\u003c/code\u003e\u003c/a\u003e tests: strict import to make pyright happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/823db395089fe268641417de452404162580a7ce\"\u003e\u003ccode\u003e823db39\u003c/code\u003e\u003c/a\u003e tests: fix wrong type (typing only)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/a1eaf5dcdc191b6e95a4d552e30c0aa54d7febf2\"\u003e\u003ccode\u003ea1eaf5d\u003c/code\u003e\u003c/a\u003e Drop django\u0026lt;5 message asserts compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/2ea14230006228f0896b7c785400f17347bdf612\"\u003e\u003ccode\u003e2ea1423\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003e_pre_setup_ran_eagerly\u003c/code\u003e on Django 5.0 and 5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/903429ca05f98dd78b9f24c2ce84e80be24c01c2\"\u003e\u003ccode\u003e903429c\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003edjango\u003c/code\u003e extra to ensure Django dependency compatible lower bound\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/96615893af607fb89fb568445bfedb7783c7aeb0\"\u003e\u003ccode\u003e9661589\u003c/code\u003e\u003c/a\u003e docs: prefer newer pytest config TOML format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/76461962b11e3740dddf9185a4a4985e7f40cf63\"\u003e\u003ccode\u003e7646196\u003c/code\u003e\u003c/a\u003e docs: remove needless comment\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-django/compare/v4.13.0...v4.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.16.2 to 0.16.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.16.5\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-27.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow rules without codes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28049\"\u003e#28049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27666\"\u003e#27666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate preview default rules and categories (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27877\"\u003e#27877\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Detect blocking generic HTTP requests (\u003ccode\u003eASYNC210\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28024\"\u003e#28024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Allow timezone-safe \u003ccode\u003estrptime\u003c/code\u003e chains (\u003ccode\u003eDTZ007\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28023\"\u003e#28023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-simplify\u003c/code\u003e] Respect side effects in \u003ccode\u003elambda\u003c/code\u003e defaults (\u003ccode\u003eSIM401\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28000\"\u003e#28000\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix duplicated \u0026quot;of\u0026quot; in \u003ccode\u003eClientOptions\u003c/code\u003e doc comment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27978\"\u003e#27978\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument rule acceptance guidelines (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27910\"\u003e#27910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocument the new category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27906\"\u003e#27906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jelle-openai\"\u003e\u003ccode\u003e@​jelle-openai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aarushkandukoori\"\u003e\u003ccode\u003e@​aarushkandukoori\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.16.5\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.5/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.16.5/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.16.5\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/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.16.5\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-27.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow rules without codes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28049\"\u003e#28049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27666\"\u003e#27666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate preview default rules and categories (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27877\"\u003e#27877\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Detect blocking generic HTTP requests (\u003ccode\u003eASYNC210\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28024\"\u003e#28024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Allow timezone-safe \u003ccode\u003estrptime\u003c/code\u003e chains (\u003ccode\u003eDTZ007\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28023\"\u003e#28023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-simplify\u003c/code\u003e] Respect side effects in \u003ccode\u003elambda\u003c/code\u003e defaults (\u003ccode\u003eSIM401\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28000\"\u003e#28000\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix duplicated \u0026quot;of\u0026quot; in \u003ccode\u003eClientOptions\u003c/code\u003e doc comment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27978\"\u003e#27978\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument rule acceptance guidelines (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27910\"\u003e#27910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocument the new category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27906\"\u003e#27906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jelle-openai\"\u003e\u003ccode\u003e@​jelle-openai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aarushkandukoori\"\u003e\u003ccode\u003e@​aarushkandukoori\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.16.4\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-20.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-use-pathlib\u003c/code\u003e] Add autofix for \u003ccode\u003ePTH116\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26460\"\u003e#26460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Restrict \u003ccode\u003edelete-full-slice\u003c/code\u003e to lists (\u003ccode\u003eFURB131\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27711\"\u003e#27711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Skip \u003ccode\u003eFURB101\u003c/code\u003e and \u003ccode\u003eFURB103\u003c/code\u003e when the \u003ccode\u003eopen\u003c/code\u003e argument is a file descriptor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27643\"\u003e#27643\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eInvalidInstruction\u003c/code\u003e on Windows CPUs that do not support \u003ccode\u003ePOPCNT\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27803\"\u003e#27803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Emit semantic syntax errors in string type definitions as \u003ccode\u003eF722\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27835\"\u003e#27835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Allow \u003ccode\u003eos._exit\u003c/code\u003e imports in \u003ccode\u003eimport-private-name\u003c/code\u003e (\u003ccode\u003ePLC2701\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27738\"\u003e#27738\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/astral-sh/ruff/commit/9e4938c4a60bed3e87a11ee1e1db1bd23f4d964a\"\u003e\u003ccode\u003e9e4938c\u003c/code\u003e\u003c/a\u003e Bump 0.16.5 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28110\"\u003e#28110\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/aad0e909ef1390f4b2a3ba8aa0a67fb8ea5cbacd\"\u003e\u003ccode\u003eaad0e90\u003c/code\u003e\u003c/a\u003e Allow rules without codes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28049\"\u003e#28049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/5fdab73c5052350400c36b08c5d7710210343bc4\"\u003e\u003ccode\u003e5fdab73\u003c/code\u003e\u003c/a\u003e Update preview default rules and categories (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27877\"\u003e#27877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/29c8e5b2d0a46eb7dc4ff11c1b0a0dc5ccea52e4\"\u003e\u003ccode\u003e29c8e5b\u003c/code\u003e\u003c/a\u003e Document rule acceptance guidelines (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27910\"\u003e#27910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/50a4d7fd106603a5616b01ac3bef3306252b248f\"\u003e\u003ccode\u003e50a4d7f\u003c/code\u003e\u003c/a\u003e Document the new category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27906\"\u003e#27906\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ada87950ea188f882f69b7bd6e2213a9696e3ee2\"\u003e\u003ccode\u003eada8795\u003c/code\u003e\u003c/a\u003e Introduce category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27666\"\u003e#27666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8947238863b61922bfc83f07edcc697c1cc07c0\"\u003e\u003ccode\u003ed894723\u003c/code\u003e\u003c/a\u003e [ty] Infer lambda parameters through callable type aliases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28109\"\u003e#28109\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/2685fdebbcf9938736fed8c45886a629f9c99a06\"\u003e\u003ccode\u003e2685fde\u003c/code\u003e\u003c/a\u003e [ty] Narrow functional enum members in \u003ccode\u003e==\u003c/code\u003e and \u003ccode\u003ematch\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28103\"\u003e#28103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/efcffd2178ce62e9951a53d4c50cadc225a0cfec\"\u003e\u003ccode\u003eefcffd2\u003c/code\u003e\u003c/a\u003e [ty] Intersection simplifications with subtype-related generic specialization...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commi...\n\n_Description has been truncated_","html_url":"https://github.com/athulya3404/EasyTechStore/pull/16","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/athulya3404%2FEasyTechStore/issues/16","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/16/packages"}},{"old_version":"6.0.9","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-09-01T17:14:18.000Z","version_change":"6.0.9 → 6.1.0","issue":{"uuid":"5314713232","node_id":"PR_kwDOT4NvPs8AAAABByBm_w","number":14,"state":"closed","title":"Bump the python group across 1 directory with 9 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T17:07:28.000Z","author_association":null,"state_reason":null,"created_at":"2026-09-01T17:14:18.000Z","updated_at":"2026-09-04T17:07:30.000Z","time_to_close":258790,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":9,"packages":[{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.2.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"uvicorn","old_version":"0.52.3","new_version":"0.52.4"},{"name":"coverage","old_version":"7.15.4","new_version":"7.16.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.1.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.9","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"ruff","old_version":"0.16.3","new_version":"0.16.5","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 9 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.2.0` |\n| [uvicorn[standard]](https://github.com/Kludex/uvicorn) | `0.52.3` | `0.52.4` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.4` | `7.16.0` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.1.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.9` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.3` | `0.16.5` |\n\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.2.0\u003c/h2\u003e\n\u003cp\u003eCleartext HTTP/2 lands, and an HTTP/2 security fix.\u003c/p\u003e\n\u003ch2\u003eCleartext HTTP/2 (h2c)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehttp2_cleartext\u003c/code\u003e accepts \u003ccode\u003eprior-knowledge\u003c/code\u003e, \u003ccode\u003eupgrade\u003c/code\u003e, \u003ccode\u003eboth\u003c/code\u003e or \u003ccode\u003eoff\u003c/code\u003e (the\ndefault). Prior knowledge serves a connection that opens with the HTTP/2\npreface; \u003ccode\u003eupgrade\u003c/code\u003e honours an HTTP/1.1 \u003ccode\u003eUpgrade: h2c\u003c/code\u003e request. Both work on the\ngthread, gevent and asgi workers.\u003c/p\u003e\n\u003cp\u003eThis is for deployments where TLS is terminated by a proxy that speaks HTTP/2\nupstream, so the hop into gunicorn no longer drops to HTTP/1.1. Only peers in\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e are considered; everyone else is served HTTP/1.x exactly\nas if the setting were off. Each mechanism is enabled separately, so turning one\non does not turn the other on.\u003c/p\u003e\n\u003cp\u003eDo not expose a cleartext HTTP/2 port to the internet.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eHTTP2Request\u003c/code\u003e built its headers straight from the stream, so nothing the HTTP/1\npath enforces applied over HTTP/2: the underscore and \u003ccode\u003eheader_map\u003c/code\u003e policy,\nduplicate \u003ccode\u003eHost\u003c/code\u003e and \u003ccode\u003eContent-Type\u003c/code\u003e, control characters in values, and the\n\u003ccode\u003eforwarded_allow_ips\u003c/code\u003e trust gate. An untrusted client could set \u003ccode\u003eSCRIPT_NAME\u003c/code\u003e\nand forge \u003ccode\u003eHTTP_*\u003c/code\u003e entries in the WSGI environ, and decide \u003ccode\u003ewsgi.url_scheme\u003c/code\u003e\nthrough \u003ccode\u003e:scheme\u003c/code\u003e. Both request classes now share one policy mixin, and the\nscheme comes from the transport.\u003c/p\u003e\n\u003cp\u003eIf you serve HTTP/2, this is the reason to upgrade.\u003c/p\u003e\n\u003ch2\u003eOther HTTP/2 fixes\u003c/h2\u003e\n\u003cp\u003eWSGI responses were buffered whole before anything was sent; they stream now.\nHEAD, 204 and 304 no longer carry a body. Events read while blocked on a\nflow-control window were discarded, losing requests and body data outright.\n\u003ccode\u003esendfile()\u003c/code\u003e is refused on HTTP/2 responses rather than bypassing framing.\u003c/p\u003e\n\u003ch2\u003eRequest bodies dropped on Upgrade requests\u003c/h2\u003e\n\u003cp\u003eOn the ASGI worker with the fast parser, any request carrying an \u003ccode\u003eUpgrade\u003c/code\u003e\nheader reached the application with an empty body, whatever the header's value\nand with HTTP/2 switched off entirely. Fixed in \u003ccode\u003egunicorn_h1c\u003c/code\u003e 0.6.9, which the\n\u003ccode\u003efast\u003c/code\u003e extra now requires.\u003c/p\u003e\n\u003cp\u003eFull changelog: \u003ca href=\"https://gunicorn.org/news/\"\u003ehttps://gunicorn.org/news/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/36f2a3c1b80dfa41d70859d12c5bfbbdc23a3c38\"\u003e\u003ccode\u003e36f2a3c\u003c/code\u003e\u003c/a\u003e gunicorn 26.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cbba3505f423bfb91af3a87e49ed9d232f39a8fe\"\u003e\u003ccode\u003ecbba350\u003c/code\u003e\u003c/a\u003e test: cover the h2c edge paths that had none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/988541112ebcf3f795c020fc394aa7eed75f9f53\"\u003e\u003ccode\u003e9885411\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3703\"\u003e#3703\u003c/a\u003e from cormier/fix-inconsistency-in-control-socket-docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/86f0919806a2d4d4cce376cc2088352e7643b139\"\u003e\u003ccode\u003e86f0919\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3704\"\u003e#3704\u003c/a\u003e from methane/doc-wsgi-h1c\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/585355122efe736946b977c5605e404ff2d6ddd4\"\u003e\u003ccode\u003e5853551\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3712\"\u003e#3712\u003c/a\u003e from Rotzbua/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7bce87e2aa29a4a794eb2b113ff811cad6a80736\"\u003e\u003ccode\u003e7bce87e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3700\"\u003e#3700\u003c/a\u003e from benoitc/fix/sponsor-logo-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/972dfb03b110c430712c32a3d92ef6397ff8eff6\"\u003e\u003ccode\u003e972dfb0\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3690\"\u003e#3690\u003c/a\u003e from melbinjp/docs/contributing-settings-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7b3f16be8d9cc051538b7f0b58b236b37c9550f8\"\u003e\u003ccode\u003e7b3f16b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3711\"\u003e#3711\u003c/a\u003e from benoitc/docs/http2-changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5bf237c0c7ef5bcdc63046645a17d6bafd609a34\"\u003e\u003ccode\u003e5bf237c\u003c/code\u003e\u003c/a\u003e http2: require gunicorn_h1c 0.6.9 and drop the upgrade body workaround\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7cf03385c574228e28c4952fd410ed2df02acc94\"\u003e\u003ccode\u003e7cf0338\u003c/code\u003e\u003c/a\u003e test: skip the fast-parser cases when gunicorn_h1c is absent\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn[standard]` from 0.52.3 to 0.52.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn[standard]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.52.4\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn[standard]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.52.4 (August 18, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eDate\u003c/code\u003e headers from accepted WebSocket handshakes with \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/8988c23704fc373c9206cca53ec57dd8ad7f44a5\"\u003e\u003ccode\u003e8988c23\u003c/code\u003e\u003c/a\u003e Stabilize macOS Python 3.13 signal shutdown tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3084\"\u003e#3084\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/898ddca9254b53c5bf7a6ee509756704caaa949f\"\u003e\u003ccode\u003e898ddca\u003c/code\u003e\u003c/a\u003e Update PyPI publish action to version 1.14.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3083\"\u003e#3083\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3869f8aac2bdd040fa3fbe564e1dad67e2637641\"\u003e\u003ccode\u003e3869f8a\u003c/code\u003e\u003c/a\u003e Restore Mermaid diagram rendering (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3080\"\u003e#3080\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/64148a9c574e1eb87d3d09b3ce4c256606f8d973\"\u003e\u003ccode\u003e64148a9\u003c/code\u003e\u003c/a\u003e Version 0.52.4 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3079\"\u003e#3079\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9e9e5691bd14d5c4cd66d9bd76c7730bc48461a2\"\u003e\u003ccode\u003e9e9e569\u003c/code\u003e\u003c/a\u003e docs: correct release example PR number (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3072\"\u003e#3072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b783dacab50b9d6767b0cf65826b2dc3aae21909\"\u003e\u003ccode\u003eb783dac\u003c/code\u003e\u003c/a\u003e Remove duplicate Date header from SansIO WebSocket handshakes (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3078\"\u003e#3078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/27019b2a4b1fa6d68a289fcf7d738fbdc6ee4e5d\"\u003e\u003ccode\u003e27019b2\u003c/code\u003e\u003c/a\u003e chore(deps): bump the python-packages group across 1 directory with 11 update...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1b6427311bb84a15addee688f6d41d96e33f8b0a\"\u003e\u003ccode\u003e1b64273\u003c/code\u003e\u003c/a\u003e Fix a typo in index.md (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3006\"\u003e#3006\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.3...0.52.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.4 to 7.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.16.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen combining files, now path separator slashes will automatically be converted to the local file system style. This makes it less necessary to define \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003eissue 2266\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ca href=\"https://coverage.readthedocs.io/en/latest/api_coverage.html#coverage.Coverage.switch_context\"\u003eCoverage.switch_context()\u003c/a\u003e method now returns the previous context.\u003c/li\u003e\n\u003cli\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file path when it was only meant to be replaced once, in the leading portion of the path. This is now fixed, in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003epull 2268\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixes to validation of options and configuration settings:\n\u003cul\u003e\n\u003cli\u003eNegative precision settings now always cause useful error messages (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003epull 2261\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing “Couldn’t use data file …: user-defined function raised exception” error. Now it raises a proper configuration error naming the bad regex, like other regex settings do (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003epull 2262\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eNon-string values in TOML configuration settings now produce a helpful error message instead of a traceback. This affects list settings whose elements aren’t strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e entry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the \u003ccode\u003e[paths]\u003c/code\u003e section (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003epull 2263\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like \u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can’t reach the subprocesses. The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as the entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e slipped through and failed later with “Can’t combine statement coverage data with branch data”. Each named concurrency library is now properly considered (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2270\"\u003epull 2270\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any measured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on Windows. The original extension is now restored on the annotated copy (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003epull 2265\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.16.0\"\u003ecoverage 7.16.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.16.0\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.16.0 — 2026-08-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWhen combining files, now path separator slashes will automatically be\nconverted to the local file system style. This makes it less necessary to\ndefine \u003ccode\u003e[paths]\u003c/code\u003e configuration to combine data across operating systems.\nFixes \u003ccode\u003eissue 2266\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe :meth:\u003ccode\u003e.Coverage.switch_context\u003c/code\u003e method now returns the previous context.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: previously, a \u003ccode\u003e[paths]\u003c/code\u003e pattern would be replaced everywhere in a file\npath when it was only meant to be replaced once, in the leading portion of\nthe path. This is now fixed, in \u003ccode\u003epull 2268\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixes to validation of options and configuration settings:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNegative precision settings now always cause useful error messages (\u003ccode\u003epull 2261\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAn invalid regex in the \u003ccode\u003e--contexts\u003c/code\u003e option (or the \u003ccode\u003e[report] contexts\u003c/code\u003e setting) reported a confusing \u0026quot;Couldn't use data file ...:\nuser-defined function raised exception\u0026quot; error. Now it raises a proper\nconfiguration error naming the bad regex, like other regex settings do\n(\u003ccode\u003epull 2262\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eNon-string values in TOML configuration settings now produce a helpful\nerror message instead of a traceback.  This affects list settings whose\nelements aren't strings (like \u003ccode\u003eomit\u003c/code\u003e, \u003ccode\u003eexclude_lines\u003c/code\u003e, or a \u003ccode\u003e[paths]\u003c/code\u003e\nentry), file settings like \u003ccode\u003edata_file\u003c/code\u003e, and any wrong-typed value in the\n\u003ccode\u003e[paths]\u003c/code\u003e section (\u003ccode\u003epull 2263\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ecoverage run\u003c/code\u003e refuses run-affecting command-line options like\n\u003ccode\u003e--branch\u003c/code\u003e alongside \u003ccode\u003e--concurrency=multiprocessing\u003c/code\u003e, since they can't\nreach the subprocesses.  The check only recognized \u003ccode\u003emultiprocessing\u003c/code\u003e as\nthe entire option value, so \u003ccode\u003e--concurrency=multiprocessing,thread\u003c/code\u003e\nslipped through and failed later with \u0026quot;Can't combine statement coverage\ndata with branch data\u0026quot;.  Each named concurrency library is now properly\nconsidered (\u003ccode\u003epull 2270\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003ecoverage annotate -d DIR\u003c/code\u003e raised an \u003ccode\u003eAssertionError\u003c/code\u003e if any\nmeasured file had an extension other than \u003ccode\u003e.py\u003c/code\u003e, such as a \u003ccode\u003e.pyw\u003c/code\u003e file on\nWindows.  The original extension is now restored on the annotated copy (\u003ccode\u003epull 2265\u003c/code\u003e_).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2261: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2261\"\u003ecoveragepy/coveragepy#2261\u003c/a\u003e\n.. _pull 2262: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2262\"\u003ecoveragepy/coveragepy#2262\u003c/a\u003e\n.. _pull 2263: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2263\"\u003ecoveragepy/coveragepy#2263\u003c/a\u003e\n.. _pull 2265: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2265\"\u003ecoveragepy/coveragepy#2265\u003c/a\u003e\n.. _issue 2266: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2266\"\u003ecoveragepy/coveragepy#2266\u003c/a\u003e\n.. _pull 2268: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2268\"\u003ecoveragepy/coveragepy#2268\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/coveragepy/coveragepy/commit/3e9fc1653ef31089d02eb7618b9d9ac9414378fc\"\u003e\u003ccode\u003e3e9fc16\u003c/code\u003e\u003c/a\u003e docs: prep for 7.16.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/38be8d13afee6b6525492fc375c739cdfb675e9b\"\u003e\u003ccode\u003e38be8d1\u003c/code\u003e\u003c/a\u003e build: control check-manifest explicitly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/8eb1266ead5c6d356d3437637a509ff86b566253\"\u003e\u003ccode\u003e8eb1266\u003c/code\u003e\u003c/a\u003e docs(build): no longer commit sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1a8b3fa57d56bb70bad62c93d224c18a0fbaae6f\"\u003e\u003ccode\u003e1a8b3fa\u003c/code\u003e\u003c/a\u003e docs: remove sample_html\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/aeaa79b812d1bc637ebb5582ab12c076e192c87e\"\u003e\u003ccode\u003eaeaa79b\u003c/code\u003e\u003c/a\u003e docs: linklint is now sphinx-linklint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d5eaf3f6d38f58746bc69e87e64c0b0277a9077d\"\u003e\u003ccode\u003ed5eaf3f\u003c/code\u003e\u003c/a\u003e test: a branchless way to re-add extensions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/57e52fd431cecc1ca03de2c5b1288e0b330c2ef4\"\u003e\u003ccode\u003e57e52fd\u003c/code\u003e\u003c/a\u003e docs: adjust CHANGES for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b9d304d77f7ce3d55df3a46339dbc56d1f49df58\"\u003e\u003ccode\u003eb9d304d\u003c/code\u003e\u003c/a\u003e fix: check for multiprocessing in a --concurrency list (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2270\"\u003e#2270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a6ef9284afbc7d1f392821864b64ddbda0051fc5\"\u003e\u003ccode\u003ea6ef928\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/070461fcfde0437b5b778c2c2a72e433a0a391aa\"\u003e\u003ccode\u003e070461f\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 4 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2271\"\u003e#2271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.4...7.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.1.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\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/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.9 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field\u003c/code\u003e corrupting concatenated keys (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/02a46831ceb213421761f312e1368fa7b7e796d9\"\u003e\u003ccode\u003e02a4683\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etestcase_databases\u003c/code\u003e mapping of \u003ccode\u003emulti_db = False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/bc85eb958b63b752cbd7454d6378e51ca50d891d\"\u003e\u003ccode\u003ebc85eb9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_decorators\u003c/code\u003e hoisting values above their definitions (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/4eb5abf3734ba10c96dd53abdf98e50c78c4adae\"\u003e\u003ccode\u003e4eb5abf\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_register\u003c/code\u003e referencing models defined after the admin class (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d782084a4fe43286d6b4b2d11676efad0a1356cb\"\u003e\u003ccode\u003ed782084\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003esettings_storages\u003c/code\u003e erasing settings referenced elsewhere (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/2f3eb7571f87ae8c62389ac8f977935f81fbe58e\"\u003e\u003ccode\u003e2f3eb75\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etest_http_headers\u003c/code\u003e precedence when merging into \u003ccode\u003eheaders=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d750615a98098ff0c44477041932a04089d5aa47\"\u003e\u003ccode\u003ed750615\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003estringagg\u003c/code\u003e moving import despite bare \u003ccode\u003eStringAgg\u003c/code\u003e references (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/49cb8b9c2297d329a8f858beb54fb34e7274830a\"\u003e\u003ccode\u003e49cb8b9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eutils_timezone\u003c/code\u003e matching aliased \u003ccode\u003eutc\u003c/code\u003e imports (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-upgrade/compare/1.31.1...1.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.3.0 to 2.3.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch3\u003eMypy 2.3.1\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix mypyc crash on double yielding Iterators (Daniël van Noord, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21826\"\u003e21826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix mypyc \u003ccode\u003edefault_factory\u003c/code\u003e for inherited dataclass (Daniël van Noord, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21785\"\u003e21785\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eClear mypyc coroutine env on coroutine completion (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21734\"\u003e21734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash when unpacking return value from overload (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21830\"\u003e21830\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAcknowledgements\u003c/h3\u003e\n\u003cp\u003eThanks to all mypy contributors who contributed to this release:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAgriya Khetarpal\u003c/li\u003e\n\u003cli\u003eEthan Sarp\u003c/li\u003e\n\u003cli\u003eIvan Levkivskyi\u003c/li\u003e\n\u003cli\u003eJingchen Ye\u003c/li\u003e\n\u003cli\u003eJukka Lehtosalo\u003c/li\u003e\n\u003cli\u003ePiotr Sawicki\u003c/li\u003e\n\u003cli\u003eShantanu\u003c/li\u003e\n\u003cli\u003eTom Bannink\u003c/li\u003e\n\u003cli\u003eViktor Szépe\u003c/li\u003e\n\u003cli\u003eygale\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eI'd also like to thank my employer, Dropbox, for supporting mypy development.\u003c/p\u003e\n\u003ch2\u003eMypy 2.2\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.2.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eSupport for Closed TypedDicts (PEP 728)\u003c/h3\u003e\n\u003cp\u003eMypy now supports closed TypedDicts as specified in PEP 728. A closed TypedDict cannot have extra\nkeys beyond those explicitly defined. This allows the type checker to determine that certain\noperations are safe when they otherwise wouldn't be due to the potential presence of unknown keys.\u003c/p\u003e\n\u003cp\u003eYou can use the \u003ccode\u003eclosed\u003c/code\u003e keyword argument with \u003ccode\u003eTypedDict\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eHasName = TypedDict(\u0026quot;HasName\u0026quot;, {\u0026quot;name\u0026quot;: str})\nHasOnlyName = TypedDict(\u0026quot;HasOnlyName\u0026quot;, {\u0026quot;name\u0026quot;: str}, closed=True)\nMovie = TypedDict(\u0026quot;Movie\u0026quot;, {\u0026quot;name\u0026quot;: str, \u0026quot;year\u0026quot;: int})\n\u003cp\u003emovie: Movie = {\u0026quot;name\u0026quot;: \u0026quot;Nimona\u0026quot;, \u0026quot;year\u0026quot;: 2023}\nhas_name: HasName = movie  # OK: HasName is open (default)\nhas_only_name: HasOnlyName = movie  # Error: HasOnlyName is closed and Movie has extra \u0026quot;year\u0026quot; key\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/d642c4478e9e3acbe9233edbe17ffc569a1a778c\"\u003e\u003ccode\u003ed642c44\u003c/code\u003e\u003c/a\u003e Bump version to 2.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a39242983d3c2cb85886a1eb6d5869180672784c\"\u003e\u003ccode\u003ea392429\u003c/code\u003e\u003c/a\u003e [mypyc] Fix crash on double yielding Iterators (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21826\"\u003e#21826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4843e7773e7dc8fe3f1fd1319277d6d11cd6cdb3\"\u003e\u003ccode\u003e4843e77\u003c/code\u003e\u003c/a\u003e [mypyc] Fix \u003ccode\u003edefault_factory\u003c/code\u003e for inherited dataclass (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21785\"\u003e#21785\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/14f5df93ed8d1be4f4cc9c447eb2e6e619362e05\"\u003e\u003ccode\u003e14f5df9\u003c/code\u003e\u003c/a\u003e [mypyc] Clear coroutine env on coroutine completion (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21734\"\u003e#21734\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/6dfa06dda6e34912279e498d35a43ba6dc30bfee\"\u003e\u003ccode\u003e6dfa06d\u003c/code\u003e\u003c/a\u003e Fix crash when unpacking return value from overload (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21830\"\u003e#21830\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a3857467da126d28b55724e8bb682019df9a503e\"\u003e\u003ccode\u003ea385746\u003c/code\u003e\u003c/a\u003e Bump version to 2.3.1+dev\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python/mypy/compare/v2.3.0...v2.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.16.3 to 0.16.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.16.5\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-27.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow rules without codes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28049\"\u003e#28049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27666\"\u003e#27666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate preview default rules and categories (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27877\"\u003e#27877\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Detect blocking generic HTTP requests (\u003ccode\u003eASYNC210\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28024\"\u003e#28024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Allow timezone-safe \u003ccode\u003estrptime\u003c/code\u003e chains (\u003ccode\u003eDTZ007\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28023\"\u003e#28023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-simplify\u003c/code\u003e] Respect side effects in \u003ccode\u003elambda\u003c/code\u003e defaults (\u003ccode\u003eSIM401\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28000\"\u003e#28000\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix duplicated \u0026quot;of\u0026quot; in \u003ccode\u003eClientOptions\u003c/code\u003e doc comment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27978\"\u003e#27978\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument rule acceptance guidelines (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27910\"\u003e#27910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocument the new category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27906\"\u003e#27906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jelle-openai\"\u003e\u003ccode\u003e@​jelle-openai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aarushkandukoori\"\u003e\u003ccode\u003e@​aarushkandukoori\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.16.5\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.5/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.16.5/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.16.5\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/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.16.5\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-27.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow rules without codes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28049\"\u003e#28049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27666\"\u003e#27666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate preview default rules and categories (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27877\"\u003e#27877\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Detect blocking generic HTTP requests (\u003ccode\u003eASYNC210\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28024\"\u003e#28024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Allow timezone-safe \u003ccode\u003estrptime\u003c/code\u003e chains (\u003ccode\u003eDTZ007\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28023\"\u003e#28023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-simplify\u003c/code\u003e] Respect side effects in \u003ccode\u003elambda\u003c/code\u003e defaults (\u003ccode\u003eSIM401\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/28000\"\u003e#28000\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix duplicated \u0026quot;of\u0026quot; in \u003ccode\u003eClientOptions\u003c/code\u003e doc comment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27978\"\u003e#27978\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument rule acceptance guidelines (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27910\"\u003e#27910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocument the new category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27906\"\u003e#27906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jelle-openai\"\u003e\u003ccode\u003e@​jelle-openai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aarushkandukoori\"\u003e\u003ccode\u003e@​aarushkandukoori\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.16.4\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-20.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-use-pathlib\u003c/code\u003e] Add autofix for \u003ccode\u003ePTH116\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26460\"\u003e#26460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Restrict \u003ccode\u003edelete-full-slice\u003c/code\u003e to lists (\u003ccode\u003eFURB131\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27711\"\u003e#27711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Skip \u003ccode\u003eFURB101\u003c/code\u003e and \u003ccode\u003eFURB103\u003c/code\u003e when the \u003ccode\u003eopen\u003c/code\u003e argument is a file descriptor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27643\"\u003e#27643\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eInvalidInstruction\u003c/code\u003e on Windows CPUs that do not support \u003ccode\u003ePOPCNT\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27803\"\u003e#27803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Emit semantic syntax errors in string type definitions as \u003ccode\u003eF722\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27835\"\u003e#27835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Allow \u003ccode\u003eos._exit\u003c/code\u003e imports in \u003ccode\u003eimport-private-name\u003c/code\u003e (\u003ccode\u003ePLC2701\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27738\"\u003e#27738\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/astral-sh/ruff/commit/9e4938c4a60bed3e87a11ee1e1db1bd23f4d964a\"\u003e\u003ccode\u003e9e4938c\u003c/code\u003e\u003c/a\u003e Bump 0.16.5 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28110\"\u003e#28110\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/aad0e909ef1390f4b2a3ba8aa0a67fb8ea5cbacd\"\u003e\u003ccode\u003eaad0e90\u003c/code\u003e\u003c/a\u003e Allow rules without codes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28049\"\u003e#28049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/5fdab73c5052350400c36b08c5d7710210343bc4\"\u003e\u003ccode\u003e5fdab73\u003c/code\u003e\u003c/a\u003e Update preview default rules and categories (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27877\"\u003e#27877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/29c8e5b2d0a46eb7dc4ff11c1b0a0dc5ccea52e4\"\u003e\u003ccode\u003e29c8e5b\u003c/code\u003e\u003c/a\u003e Document rule acceptance guidelines (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27910\"\u003e#27910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/50a4d7fd106603a5616b01ac3bef3306252b248f\"\u003e\u003ccode\u003e50a4d7f\u003c/code\u003e\u003c/a\u003e Document the new category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27906\"\u003e#27906\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ada87950ea188f882f69b7bd6e2213a9696e3ee2\"\u003e\u003ccode\u003eada8795\u003c/code\u003e\u003c/a\u003e Introduce category selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27666\"\u003e#27666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8947238863b61922bfc83f07edcc697c1cc07c0\"\u003e\u003ccode\u003ed894723\u003c/code\u003e\u003c/a\u003e [ty] Infer lambda parameters through callable type aliases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28109\"\u003e#28109\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/2685fdebbcf9938736fed8c45886a629f9c99a06\"\u003e\u003ccode\u003e2685fde\u003c/code\u003e\u003c/a\u003e [ty] Narrow functional enum members in \u003ccode\u003e==\u003c/code\u003e and \u003ccode\u003ematch\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28103\"\u003e#28103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/efcffd2178ce62e9951a53d4c50cadc225a0cfec\"\u003e\u003ccode\u003eefcffd2\u003c/code\u003e\u003c/a\u003e [ty] Intersection simplifications with subtype-related generic specialization...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/eb780488037504e11f145ed778654fd8a825028b\"\u003e\u003ccode\u003eeb78048\u003c/code\u003e\u003c/a\u003e [ty] Bump ecosystem-analyzer for HTML escaping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/28104\"\u003e#28104\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.16.3...0.16.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/NGUEMEWEERWANANGEDARYL/NEAD-AGRO-MARKETPLACE/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/NGUEMEWEERWANANGEDARYL%2FNEAD-AGRO-MARKETPLACE/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"}},{"old_version":"6.0.6","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-29T08:14:08.000Z","version_change":"6.0.6 → 6.1.0","issue":{"uuid":"5285452411","node_id":"PR_kwDOTVr0xc8AAAABBbSeqQ","number":55,"state":"closed","title":"Bump the python group across 1 directory with 10 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-09-05T08:13:57.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-29T08:14:08.000Z","updated_at":"2026-09-05T08:13:59.000Z","time_to_close":604789,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":10,"packages":[{"name":"django","old_version":"6.0.7","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-htmx","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/adamchainz/django-htmx"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"markdown","old_version":"3.10.2","new_version":"3.10.3","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.21","new_version":"0.16.4","repository_url":"https://github.com/astral-sh/ruff"},{"name":"semgrep","old_version":"1.169.0","new_version":"1.174.0","repository_url":"https://github.com/semgrep/semgrep"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 9 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.7` | `6.1` |\n| [django-htmx](https://github.com/adamchainz/django-htmx) | `1.27.0` | `1.29.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.10.2` | `3.10.3` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.21` | `0.16.4` |\n| [semgrep](https://github.com/semgrep/semgrep) | `1.169.0` | `1.174.0` |\n\n\nUpdates `django` from 6.0.7 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.7...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-htmx` from 1.27.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-htmx/blob/main/docs/changelog.rst\"\u003edjango-htmx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.29.0 (2026-08-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eVendor some stable htmx extensions, named per their htmx 4 versions: \u003ccode\u003ehtmx-2-compat\u003c/code\u003e, \u003ccode\u003ehx-browser-indicator\u003c/code\u003e, \u003ccode\u003ehx-download\u003c/code\u003e, \u003ccode\u003ehx-head\u003c/code\u003e, \u003ccode\u003ehx-optimistic\u003c/code\u003e, \u003ccode\u003ehx-preload\u003c/code\u003e, \u003ccode\u003ehx-prompt\u003c/code\u003e, \u003ccode\u003ehx-ptag\u003c/code\u003e, \u003ccode\u003ehx-sse\u003c/code\u003e, \u003ccode\u003ehx-targets\u003c/code\u003e, \u003ccode\u003ehx-upsert\u003c/code\u003e, and \u003ccode\u003ehx-ws\u003c/code\u003e.\nRender their script tags with the new \u003ccode\u003eextensions\u003c/code\u003e argument of the \u003ccode\u003ehtmx_script\u003c/code\u003e :doc:\u003ccode\u003etemplate tags \\\u0026lt;template_tags\u0026gt;\u003c/code\u003e, which selects the extension files matching the htmx version in use:\u003c/p\u003e\n\u003cp\u003e.. code-block:: django\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e{% htmx_script version=4 extensions=\u0026quot;hx-sse,hx-ws\u0026quot; %}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003ehx-head\u003c/code\u003e, \u003ccode\u003ehx-preload\u003c/code\u003e, \u003ccode\u003ehx-sse\u003c/code\u003e, and \u003ccode\u003ehx-ws\u003c/code\u003e are available for both htmx versions 2 and 4; the rest are htmx 4 only.\u003c/p\u003e\n\u003cp\u003eThe special name \u003ccode\u003ehtmax\u003c/code\u003e renders htmx 4’s htmax bundle of htmx plus its most popular extensions, in place of the plain htmx script:\u003c/p\u003e\n\u003cp\u003e.. code-block:: django\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e{% htmx_script version=4 extensions=\u0026quot;htmax\u0026quot; %}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003ePR [#614](https://github.com/adamchainz/django-htmx/issues/614) \u0026lt;https://github.com/adamchainz/django-htmx/pull/614\u0026gt;\u003c/code\u003e\u003cstrong\u003e.\nThanks to Rex Zhang for initial work in \u003ccode\u003ePR [#575](https://github.com/adamchainz/django-htmx/issues/575) \u0026lt;https://github.com/adamchainz/django-htmx/pull/575/commits\u0026gt;\u003c/code\u003e\u003c/strong\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpgrade the vendored htmx 2 to \u003ccode\u003eversion 2.0.10 \u0026lt;https://github.com/bigskysoftware/htmx/blob/master/CHANGELOG.md#2010---2026-04-21\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#594](https://github.com/adamchainz/django-htmx/issues/594) \u0026lt;https://github.com/adamchainz/django-htmx/pull/594\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpgrade the vendored htmx 4 to \u003ccode\u003eversion 4.0.0-beta6 \u0026lt;https://github.com/bigskysoftware/htmx/releases/tag/v4.0.0-beta6\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#610](https://github.com/adamchainz/django-htmx/issues/610) \u0026lt;https://github.com/adamchainz/django-htmx/pull/610\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd support for the polling tags protocol of the htmx 4 |hx-ptag extension|__:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:attr:\u003ccode\u003eHtmxDetails.ptag \u0026lt;django_htmx.middleware.HtmxDetails.ptag\u0026gt;\u003c/code\u003e reads the \u003ccode\u003eHX-PTag\u003c/code\u003e request header directly.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe :func:\u003ccode\u003edjango_htmx.http.ptag\u003c/code\u003e view decorator implements the protocol, with an API mirroring Django’s |etag decorator|__.\nIt computes the current tag with the given function and, when the \u003ccode\u003eHX-PTag\u003c/code\u003e request header matches, returns a 304 (Not Modified) response without calling the view, making htmx skip the swap.\nOtherwise, it calls the view and sets the \u003ccode\u003eHX-PTag\u003c/code\u003e response header.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. |hx-ptag extension| replace:: \u003ccode\u003ehx-ptag\u003c/code\u003e extension\n__ \u003ca href=\"https://four.htmx.org/extensions/hx-ptag\"\u003ehttps://four.htmx.org/extensions/hx-ptag\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. |etag decorator| replace:: \u003ccode\u003eetag\u003c/code\u003e decorator\n__ \u003ca href=\"https://docs.djangoproject.com/en/stable/topics/conditional-view-processing/\"\u003ehttps://docs.djangoproject.com/en/stable/topics/conditional-view-processing/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#613](https://github.com/adamchainz/django-htmx/issues/613) \u0026lt;https://github.com/adamchainz/django-htmx/pull/613\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSwitch package build backend from setuptools to \u003ccode\u003euv_build \u0026lt;https://docs.astral.sh/uv/concepts/build-backend/\u0026gt;\u003c/code\u003e__.\nThis makes builds with uv about nine times faster, since uv runs the backend natively, without creating a build environment or spawning a Python process.\nAdditionally, source distributions no longer include test files, which setuptools previously included incompletely, missing the files needed to actually run them.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.28.0 (2026-07-12)\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/adamchainz/django-htmx/commit/a27556eee0ffa92829427e95c7d8e2bf997a4bb0\"\u003e\u003ccode\u003ea27556e\u003c/code\u003e\u003c/a\u003e Version 1.29.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/f59765a306af6884d70e0b3a8494dcbf52830dfb\"\u003e\u003ccode\u003ef59765a\u003c/code\u003e\u003c/a\u003e Switch build backend to uv_build (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/615\"\u003e#615\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/e2da8c581f959ee909ba1c90aa98760fdb5f845c\"\u003e\u003ccode\u003ee2da8c5\u003c/code\u003e\u003c/a\u003e Note :inherited required on htmx 4 in installation docs (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/dcf641fc56dcb653f5d1c677cf48b82a7aee160d\"\u003e\u003ccode\u003edcf641f\u003c/code\u003e\u003c/a\u003e Vendor htmx extensions (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/614\"\u003e#614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/007f97c3e25924ffd85c88f2466e373b4df0eb22\"\u003e\u003ccode\u003e007f97c\u003c/code\u003e\u003c/a\u003e Add htmx 4 polling support (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/613\"\u003e#613\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/f2c3a138631ac296b6b02ee49bbb5a7a5d905321\"\u003e\u003ccode\u003ef2c3a13\u003c/code\u003e\u003c/a\u003e Remove sphinx-build-compatibility (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/9404744305ea391cb567c3430ccddcf9e25c2c38\"\u003e\u003ccode\u003e9404744\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/611\"\u003e#611\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/07171ea72639c5ee9956713d03d303bf523d605b\"\u003e\u003ccode\u003e07171ea\u003c/code\u003e\u003c/a\u003e Upgrade htmx 4 to 4.0.0-beta6 (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/c1af3116605888102265b05d79b1004ee3814d63\"\u003e\u003ccode\u003ec1af311\u003c/code\u003e\u003c/a\u003e Upgrade htmx to version 2.0.10 (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/594\"\u003e#594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-htmx/commit/65a895aa7c2f56eeb3d7fa5b3bd7aef7ce52f50d\"\u003e\u003ccode\u003e65a895a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/adamchainz/django-htmx/issues/605\"\u003e#605\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-htmx/compare/1.27.0...1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-ninja` from 1.6.2 to 1.6.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/vitalik/django-ninja/releases\"\u003edjango-ninja's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.6.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Django upper version constraint by \u003ca href=\"https://github.com/Stormheg\"\u003e\u003ccode\u003e@​Stormheg\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vitalik/django-ninja/pull/1749\"\u003evitalik/django-ninja#1749\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate packaging metadata to PEP 621 for Flit 4 compatibility (with \u003ca href=\"https://github.com/LexGlu\"\u003e\u003ccode\u003e@​LexGlu\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/vitalik/django-ninja/pull/1753\"\u003evitalik/django-ninja#1753\u003c/a\u003e) in \u003ca href=\"https://redirect.github.com/vitalik/django-ninja/pull/1762\"\u003evitalik/django-ninja#1762\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eHotfix release cut from v1.6.2 — contains only the changes above, none of the other work currently on master.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/vitalik/django-ninja/compare/v1.6.2...v1.6.3\"\u003ehttps://github.com/vitalik/django-ninja/compare/v1.6.2...v1.6.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vitalik/django-ninja/commit/4086c9b36a72aa8e47ef882162a478a017841c0d\"\u003e\u003ccode\u003e4086c9b\u003c/code\u003e\u003c/a\u003e Bump version to 1.6.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vitalik/django-ninja/commit/1229ff928f78be2fd456bcb1b5afaf1eabf8e195\"\u003e\u003ccode\u003e1229ff9\u003c/code\u003e\u003c/a\u003e Migrate pyproject.toml to PEP 621 [project] metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vitalik/django-ninja/commit/9798e0a24b86ab0f5c0422861d4803fff1ccfa91\"\u003e\u003ccode\u003e9798e0a\u003c/code\u003e\u003c/a\u003e Drop Django upper version constraint\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/vitalik/django-ninja/compare/v1.6.2...v1.6.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown` from 3.10.2 to 3.10.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Python-Markdown/markdown/releases\"\u003emarkdown's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 3.10.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eSetextHeaderProcessor\u003c/code\u003e regex to prevent mixed \u003ccode\u003e=\u003c/code\u003e and \u003ccode\u003e-\u003c/code\u003e chars in setext-style headers (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1606\"\u003e#1606\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd AI Policy to Contributing Guide.\u003c/li\u003e\n\u003cli\u003eOfficially document all included extensions as being in maintenance mode.\u003c/li\u003e\n\u003cli\u003eLink the Extension API documentation to the API Reference (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1612\"\u003e#1612\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/Python-Markdown/markdown/blob/master/docs/changelog.md\"\u003emarkdown's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[3.10.3] - 2026-07-30\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eSetextHeaderProcessor\u003c/code\u003e regex to prevent mixed \u003ccode\u003e=\u003c/code\u003e and \u003ccode\u003e-\u003c/code\u003e chars in setext-style headers (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1606\"\u003e#1606\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd AI Policy to Contributing Guide.\u003c/li\u003e\n\u003cli\u003eOfficially document all included extensions as being in maintenance mode.\u003c/li\u003e\n\u003cli\u003eLink the Extension API documentation to the API Reference (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1612\"\u003e#1612\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-Markdown/markdown/commit/bb50627dc07fde6ee5ed7478464062c537ebad2c\"\u003e\u003ccode\u003ebb50627\u003c/code\u003e\u003c/a\u003e Bump version to 3.10.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/8453df010daf9547efcc20a05bb12c0e2fd2016a\"\u003e\u003ccode\u003e8453df0\u003c/code\u003e\u003c/a\u003e Update Extension API documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/93ac448b161deb5a4578c7f56bd5f5c39dc280c3\"\u003e\u003ccode\u003e93ac448\u003c/code\u003e\u003c/a\u003e Document that all extensions are in maintenance mode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/d38fd4a6ee4ef897812bc481855a7f9d8a4ad4f1\"\u003e\u003ccode\u003ed38fd4a\u003c/code\u003e\u003c/a\u003e Create AI Policy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/ddead47873e7918829e1d8b0eaee6ab725793cc9\"\u003e\u003ccode\u003eddead47\u003c/code\u003e\u003c/a\u003e Prevent mixed =/- chars in Setext-style headings\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Python-Markdown/markdown/compare/3.10.2...3.10.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs` from 6.0.6 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.6...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.6.0 to 4.6.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.6.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks that contain \u003ccode\u003e\u0026quot;scripts\u0026quot;: {\u0026quot;build\u0026quot;: ...}\u003c/code\u003e with\nnpm 11.x.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3737\"\u003e#3737\u003c/a\u003e issue by \u003ca href=\"https://github.com/mheiges\"\u003e\u003ccode\u003e@​mheiges\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epre-commit v4.6.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInstall \u003ccode\u003elanguage: node\u003c/code\u003e hooks via \u003ccode\u003egit\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003eFixes npm 12.x compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3719\"\u003e#3719\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3517\"\u003e#3517\u003c/a\u003e issue by \u003ca href=\"https://github.com/ojob\"\u003e\u003ccode\u003e@​ojob\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003eJULIA_DEPOT_PATH\u003c/code\u003e for \u003ccode\u003elanguage: julia\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3711\"\u003e#3711\u003c/a\u003e PR by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit-ci/runner-image/issues/335\"\u003epre-commit-ci/runner-image#335\u003c/a\u003e issue by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eProduce error on mistyped \u003ccode\u003e--repo\u003c/code\u003e for \u003ccode\u003epre-commit autoupdate\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3701\"\u003e#3701\u003c/a\u003e PR by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3695\"\u003e#3695\u003c/a\u003e issue by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eImprove performance of commit existence check in \u003ccode\u003epre-push\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3726\"\u003e#3726\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3604\"\u003e#3604\u003c/a\u003e issue by \u003ca href=\"https://github.com/ptarjan\"\u003e\u003ccode\u003e@​ptarjan\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAvoid duplicating conflicted filenames during \u003ccode\u003epre-commit run --all-files\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3727\"\u003e#3727\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3706\"\u003e#3706\u003c/a\u003e issue by \u003ca href=\"https://github.com/RomanValov\"\u003e\u003ccode\u003e@​RomanValov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.6.2 - 2026-08-10\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: node\u003c/code\u003e hooks that contain \u003ccode\u003e\u0026quot;scripts\u0026quot;: {\u0026quot;build\u0026quot;: ...}\u003c/code\u003e with\nnpm 11.x.\n\u003cul\u003e\n\u003cli\u003eRegressed in 4.6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3737\"\u003e#3737\u003c/a\u003e issue by \u003ca href=\"https://github.com/mheiges\"\u003e\u003ccode\u003e@​mheiges\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.6.1 - 2026-07-21\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInstall \u003ccode\u003elanguage: node\u003c/code\u003e hooks via \u003ccode\u003egit\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003eFixes npm 12.x compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3719\"\u003e#3719\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3517\"\u003e#3517\u003c/a\u003e issue by \u003ca href=\"https://github.com/ojob\"\u003e\u003ccode\u003e@​ojob\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003eJULIA_DEPOT_PATH\u003c/code\u003e for \u003ccode\u003elanguage: julia\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3711\"\u003e#3711\u003c/a\u003e PR by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit-ci/runner-image/issues/335\"\u003epre-commit-ci/runner-image#335\u003c/a\u003e issue by \u003ca href=\"https://github.com/damonbayer\"\u003e\u003ccode\u003e@​damonbayer\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eProduce error on mistyped \u003ccode\u003e--repo\u003c/code\u003e for \u003ccode\u003epre-commit autoupdate\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3701\"\u003e#3701\u003c/a\u003e PR by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3695\"\u003e#3695\u003c/a\u003e issue by \u003ca href=\"https://github.com/mxr\"\u003e\u003ccode\u003e@​mxr\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eImprove performance of commit existence check in \u003ccode\u003epre-push\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3726\"\u003e#3726\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3604\"\u003e#3604\u003c/a\u003e issue by \u003ca href=\"https://github.com/ptarjan\"\u003e\u003ccode\u003e@​ptarjan\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAvoid duplicating conflicted filenames during \u003ccode\u003epre-commit run --all-files\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3727\"\u003e#3727\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3706\"\u003e#3706\u003c/a\u003e issue by \u003ca href=\"https://github.com/RomanValov\"\u003e\u003ccode\u003e@​RomanValov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/9767b6c8211a6bf683875a0afcf2b390457a4b66\"\u003e\u003ccode\u003e9767b6c\u003c/code\u003e\u003c/a\u003e v4.6.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/42ee3ff5ac1cae639613c9ad002d0502ae82384f\"\u003e\u003ccode\u003e42ee3ff\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3743\"\u003e#3743\u003c/a\u003e from pre-commit/npm-build-scripts-11-x\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/30566198cb2d05201625f92b660a34c38ffe2dc7\"\u003e\u003ccode\u003e3056619\u003c/code\u003e\u003c/a\u003e fix \u003ccode\u003elanguage: node\u003c/code\u003e for hooks with build scripts and npm 11.x\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/242ce8a25657be59f2770b50de41fe0fd508820d\"\u003e\u003ccode\u003e242ce8a\u003c/code\u003e\u003c/a\u003e v4.6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/766e550cd31defcb6096a96735c9de299b0eb301\"\u003e\u003ccode\u003e766e550\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3727\"\u003e#3727\u003c/a\u003e from pre-commit/dedupe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/1558d06e3d9e5f495cd97ccaefe937b7c44ead70\"\u003e\u003ccode\u003e1558d06\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3726\"\u003e#3726\u003c/a\u003e from pre-commit/exists-faster\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/8a1c47a2528419e41aadfcf8135926d68f7ffbbb\"\u003e\u003ccode\u003e8a1c47a\u003c/code\u003e\u003c/a\u003e avoid duplicate files in --all-files during conflict\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2e01c999b2466ac7e14e1e4a57a04504bd6c1b28\"\u003e\u003ccode\u003e2e01c99\u003c/code\u003e\u003c/a\u003e faster check of rev existing locally as a commit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/3613bf27f5500d327de70cd2fa68fa20c8975659\"\u003e\u003ccode\u003e3613bf2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3701\"\u003e#3701\u003c/a\u003e from pre-commit/autoupdate-repos\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/1d811d9b0b655fa648001ca479a0b7da9ebd7b8c\"\u003e\u003ccode\u003e1d811d9\u003c/code\u003e\u003c/a\u003e Return an error for invalid --repo\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.6.0...v4.6.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-django` from 4.12.0 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/pytest-dev/pytest-django/releases\"\u003epytest-django's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.14.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pytest-django.readthedocs.io/en/stable/changelog.html#v4-14-0-2026-08-10\"\u003ehttps://pytest-django.readthedocs.io/en/stable/changelog.html#v4-14-0-2026-08-10\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.13.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pytest-django.readthedocs.io/en/latest/changelog.html#v4-13-0-2026-08-06\"\u003ehttps://pytest-django.readthedocs.io/en/latest/changelog.html#v4-13-0-2026-08-06\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/pytest-dev/pytest-django/blob/main/docs/changelog.rst\"\u003epytest-django's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.14.0 (2026-08-10)\u003c/h2\u003e\n\u003cp\u003eCompatibility\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRestored (unofficial) support for Django 5.0 and Django 5.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eImprovements\n^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a \u003ccode\u003edjango\u003c/code\u003e extra to the package. By depending on this extra\n(e.g. \u003ccode\u003epip install pytest-django[django]\u003c/code\u003e), the dependency resolver\nwill ensure you get a version of pytest-django that is compatible with\nyour version of Django (lower bound only). At least from now on...\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.13.0 (2026-08-06)\u003c/h2\u003e\n\u003cp\u003eCompatibility\n^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Django 4.2 and 5.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eImprovements\n^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eExport \u003ccode\u003epytest_django.Settings\u003c/code\u003e from the top-level \u003ccode\u003epytest_django\u003c/code\u003e\nmodule so the :fixture:\u003ccode\u003esettings\u003c/code\u003e fixture can be type-annotated\n(\u003ccode\u003e[#1257](https://github.com/pytest-dev/pytest-django/issues/1257) \u0026lt;https://github.com/pytest-dev/pytest-django/issues/1257\u0026gt;\u003c/code\u003e__).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBugfixes\n^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed type hints of assert methods to match actual signature (\u003ccode\u003ePR [#1271](https://github.com/pytest-dev/pytest-django/issues/1271) \u0026lt;https://github.com/pytest-dev/pytest-django/pull/1271\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eHandled Django 6.2's \u003ccode\u003eImproperlyConfigured\u003c/code\u003e (in addition to \u003ccode\u003eImportError\u003c/code\u003e) when the configured \u003ccode\u003eDJANGO_SETTINGS_MODULE\u003c/code\u003e cannot be imported, so pytest-django still shows its guidance message.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003edjango_db(transaction=True)\u003c/code\u003e tests being set up twice, which repeated the \u003ccode\u003eserialized_rollback\u003c/code\u003e restore and the \u003ccode\u003efixtures\u003c/code\u003e load, and sent \u003ccode\u003esetting_changed\u003c/code\u003e and \u003ccode\u003epost_migrate\u003c/code\u003e twice when \u003ccode\u003eavailable_apps\u003c/code\u003e is set.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003e--help\u003c/code\u003e/\u003ccode\u003e--version\u003c/code\u003e failing with \u003ccode\u003eAppRegistryNotReady\u003c/code\u003e (surfaced as a \u003ccode\u003ecould not load initial conftests\u003c/code\u003e warning) when a \u003ccode\u003econftest.py\u003c/code\u003e imports Django models at the top level. Django is now set up even when \u003ccode\u003e--help\u003c/code\u003e/\u003ccode\u003e--version\u003c/code\u003e are passed, before the initial conftests are loaded for these options (\u003ccode\u003e[#1152](https://github.com/pytest-dev/pytest-django/issues/1152) \u0026lt;https://github.com/pytest-dev/pytest-django/issues/1152\u0026gt;\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/pytest-dev/pytest-django/commit/1a6b6121c7f1f20e2a32c5f1ece7b6671160b968\"\u003e\u003ccode\u003e1a6b612\u003c/code\u003e\u003c/a\u003e Release 4.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/fffb11d199a4f59e5acec5cb42a8ca257ce987e2\"\u003e\u003ccode\u003efffb11d\u003c/code\u003e\u003c/a\u003e docs: remove $ for consistency\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/e8c0606c3871db20f2273bd700c8a51337205622\"\u003e\u003ccode\u003ee8c0606\u003c/code\u003e\u003c/a\u003e docs: move the \u003ccode\u003edjango\u003c/code\u003e extra explanation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/b66deb68fd5820a763005b5e689821737031524a\"\u003e\u003ccode\u003eb66deb6\u003c/code\u003e\u003c/a\u003e tests: strict import to make pyright happy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/823db395089fe268641417de452404162580a7ce\"\u003e\u003ccode\u003e823db39\u003c/code\u003e\u003c/a\u003e tests: fix wrong type (typing only)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/a1eaf5dcdc191b6e95a4d552e30c0aa54d7febf2\"\u003e\u003ccode\u003ea1eaf5d\u003c/code\u003e\u003c/a\u003e Drop django\u0026lt;5 message asserts compat\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/2ea14230006228f0896b7c785400f17347bdf612\"\u003e\u003ccode\u003e2ea1423\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003e_pre_setup_ran_eagerly\u003c/code\u003e on Django 5.0 and 5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/903429ca05f98dd78b9f24c2ce84e80be24c01c2\"\u003e\u003ccode\u003e903429c\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003edjango\u003c/code\u003e extra to ensure Django dependency compatible lower bound\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/96615893af607fb89fb568445bfedb7783c7aeb0\"\u003e\u003ccode\u003e9661589\u003c/code\u003e\u003c/a\u003e docs: prefer newer pytest config TOML format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest-django/commit/76461962b11e3740dddf9185a4a4985e7f40cf63\"\u003e\u003ccode\u003e7646196\u003c/code\u003e\u003c/a\u003e docs: remove needless comment\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest-django/compare/v4.12.0...v4.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.21 to 0.16.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.16.4\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-20.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-use-pathlib\u003c/code\u003e] Add autofix for \u003ccode\u003ePTH116\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26460\"\u003e#26460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Restrict \u003ccode\u003edelete-full-slice\u003c/code\u003e to lists (\u003ccode\u003eFURB131\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27711\"\u003e#27711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Skip \u003ccode\u003eFURB101\u003c/code\u003e and \u003ccode\u003eFURB103\u003c/code\u003e when the \u003ccode\u003eopen\u003c/code\u003e argument is a file descriptor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27643\"\u003e#27643\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eInvalidInstruction\u003c/code\u003e on Windows CPUs that do not support \u003ccode\u003ePOPCNT\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27803\"\u003e#27803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Emit semantic syntax errors in string type definitions as \u003ccode\u003eF722\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27835\"\u003e#27835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Allow \u003ccode\u003eos._exit\u003c/code\u003e imports in \u003ccode\u003eimport-private-name\u003c/code\u003e (\u003ccode\u003ePLC2701\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27738\"\u003e#27738\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[syntax-errors] Align mixed t-string/bytes error message with CPython 3.14 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27766\"\u003e#27766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003ectypes.LittleEndianStructure\u003c/code\u003e and related types to existing exception (\u003ccode\u003eRUF012\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27753\"\u003e#27753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[syntax-errors] Detect duplicate keyword arguments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/17804\"\u003e#17804\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[syntax-errors] Detect parameters declared \u003ccode\u003enonlocal\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27628\"\u003e#27628\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOffer display-only fixes and mark safe fixes preferred (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27807\"\u003e#27807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport pull diagnostics for notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27779\"\u003e#27779\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd default indicator to rules table (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27724\"\u003e#27724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix broken link to Python docs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27757\"\u003e#27757\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix s390x stacker assembly in release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27776\"\u003e#27776\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGuarantee minimum stack size when parsing a module, standalone expression, and suites (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25464\"\u003e#25464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce configuration deserialization code size (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27924\"\u003e#27924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCheck packed AST index bounds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27849\"\u003e#27849\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AbhinavMir\"\u003e\u003ccode\u003e@​AbhinavMir\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eduardorittner\"\u003e\u003ccode\u003e@​eduardorittner\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/royb3\"\u003e\u003ccode\u003e@​royb3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carljm\"\u003e\u003ccode\u003e@​carljm\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rosstitmarsh\"\u003e\u003ccode\u003e@​rosstitmarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.16.4\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-08-20.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-use-pathlib\u003c/code\u003e] Add autofix for \u003ccode\u003ePTH116\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26460\"\u003e#26460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Restrict \u003ccode\u003edelete-full-slice\u003c/code\u003e to lists (\u003ccode\u003eFURB131\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27711\"\u003e#27711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Skip \u003ccode\u003eFURB101\u003c/code\u003e and \u003ccode\u003eFURB103\u003c/code\u003e when the \u003ccode\u003eopen\u003c/code\u003e argument is a file descriptor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27643\"\u003e#27643\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eInvalidInstruction\u003c/code\u003e on Windows CPUs that do not support \u003ccode\u003ePOPCNT\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27803\"\u003e#27803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Emit semantic syntax errors in string type definitions as \u003ccode\u003eF722\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27835\"\u003e#27835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Allow \u003ccode\u003eos._exit\u003c/code\u003e imports in \u003ccode\u003eimport-private-name\u003c/code\u003e (\u003ccode\u003ePLC2701\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27738\"\u003e#27738\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[syntax-errors] Align mixed t-string/bytes error message with CPython 3.14 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27766\"\u003e#27766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003ectypes.LittleEndianStructure\u003c/code\u003e and related types to existing exception (\u003ccode\u003eRUF012\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27753\"\u003e#27753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[syntax-errors] Detect duplicate keyword arguments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/17804\"\u003e#17804\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[syntax-errors] Detect parameters declared \u003ccode\u003enonlocal\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27628\"\u003e#27628\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOffer display-only fixes and mark safe fixes preferred (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27807\"\u003e#27807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport pull diagnostics for notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27779\"\u003e#27779\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd default indicator to rules table (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27724\"\u003e#27724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix broken link to Python docs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27757\"\u003e#27757\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix s390x stacker assembly in release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27776\"\u003e#27776\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGuarantee minimum stack size when parsing a module, standalone expression, and suites (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25464\"\u003e#25464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce configuration deserialization code size (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27924\"\u003e#27924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCheck packed AST index bounds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/27849\"\u003e#27849\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AbhinavMir\"\u003e\u003ccode\u003e@​AbhinavMir\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eduardorittner\"\u003e\u003ccode\u003e@​eduardorittner\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/royb3\"\u003e\u003ccode\u003e@​royb3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carljm\"\u003e\u003ccode\u003e@​carljm\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rosstitmarsh\"\u003e\u003ccode\u003e@​rosstitmarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zaniebot\"\u003e\u003ccode\u003e@​zaniebot\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/11c76bf48fdac06b2f240cba502eda96da4dce77\"\u003e\u003ccode\u003e11c76bf\u003c/code\u003e\u003c/a\u003e Bump 0.16.4 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27937\"\u003e#27937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d53c8c58662ca0576ddd502aa1a2979acf03832f\"\u003e\u003ccode\u003ed53c8c5\u003c/code\u003e\u003c/a\u003e Isolate playground builds from deployment credentials (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27839\"\u003e#27839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/cab001e5dec22f55653021f1f7be449e47c7d81e\"\u003e\u003ccode\u003ecab001e\u003c/code\u003e\u003c/a\u003e Disable uv preview for releases and pre-commit hooks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27939\"\u003e#27939\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f8d575fedc97e75ea62c679d77afb14246afa88e\"\u003e\u003ccode\u003ef8d575f\u003c/code\u003e\u003c/a\u003e [ty] Clarify writing guidance for human readers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27912\"\u003e#27912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ca45faebb1750a213df19ed7f686ee5cf9277f93\"\u003e\u003ccode\u003eca45fae\u003c/code\u003e\u003c/a\u003e Set \u003ccode\u003e--preview\u003c/code\u003e and \u003ccode\u003e--default-index\u003c/code\u003e for the \u003ccode\u003euv-lock\u003c/code\u003e hook (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27935\"\u003e#27935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4827bf7cb449055e46fbfaf4b26e5125883a0569\"\u003e\u003ccode\u003e4827bf7\u003c/code\u003e\u003c/a\u003e Export \u003ccode\u003eUV_DEFAULT_INDEX\u003c/code\u003e in \u003ccode\u003erelease.sh\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27934\"\u003e#27934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d1087a4b9e03d253a88703f34e0869ee4b805456\"\u003e\u003ccode\u003ed1087a4\u003c/code\u003e\u003c/a\u003e [ty] Handle assignment expressions in string annotations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27921\"\u003e#27921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/680cce48b6d89ab5b1566e4b797bd4847d861815\"\u003e\u003ccode\u003e680cce4\u003c/code\u003e\u003c/a\u003e [ty] Optimize inherited recursive protocol comparisons (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27922\"\u003e#27922\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/974d3cbc04520c112843d6b92577844587402e04\"\u003e\u003ccode\u003e974d3cb\u003c/code\u003e\u003c/a\u003e Upgrade ecosystem-analyzer and mypy_primer to the latest upstream pins (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27932\"\u003e#27932\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b169b402356d0676451f4a7bc6903da2644b31eb\"\u003e\u003ccode\u003eb169b40\u003c/code\u003e\u003c/a\u003e Install cargo tools locked (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/27929\"\u003e#27929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.16.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `semgrep` from 1.169.0 to 1.174.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/semgrep/semgrep/releases\"\u003esemgrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.174.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.174.0\"\u003e1.174.0\u003c/a\u003e - 2026-08-20\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDiff scans now report which dependency source files were added or modified relative to the merge base. (changed-dependency-sources)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePartial scans (\u003ccode\u003e--x-partial-scan-rule-id\u003c/code\u003e) now resolve dependencies only for\nsubprojects whose ecosystem is evaluated by the rules being run. Subprojects in\nany other ecosystem are skipped and reported to semgrep-app as skipped\nsubprojects. (SC-3830)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.173.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.173.0\"\u003e1.173.0\u003c/a\u003e - 2026-08-12\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esemgrep-core -version\u003c/code\u003e now reports the git commit that the binary was built\nfrom. (core-version-git-sha)\u003c/li\u003e\n\u003cli\u003ePro: Added a \u003ccode\u003eno_disk_cache\u003c/code\u003e memory policy (\u003ccode\u003e--x-mem-policy no_disk_cache\u003c/code\u003e) to trade higher memory usage for not caching intermediary scan data structures on disk. (no-disk-cache-memory-policy)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFile targeting now submits path-filtering work to worker domains in batches\nremoving multithreaded synchronization overhead for very large repos. (ENGINE-2854)\u003c/li\u003e\n\u003cli\u003eParallel rule parsing for large rulesets now shards rules into files sized by\nbytes rather than by worker count, stabilizing memory allocations at parse-time\nand improving parsing throughput. (ENGINE-2920)\u003c/li\u003e\n\u003cli\u003eUpdated the Solidity parser for newer language features (transient storage, named mapping parameters, \u003ccode\u003elayout at\u003c/code\u003e, assembly flags, \u003ccode\u003eglobal\u003c/code\u003e using-directives, EVM Cancun builtins) and corrected ternary/\u003ccode\u003e?:\u003c/code\u003e vs member-access precedence. (LANG-207)\u003c/li\u003e\n\u003cli\u003ePro: Unsupported patterns in case expressions are now handled more\nrobustly, with improved error recovery during taint analysis — branch\nbodies are no longer dropped from the dataflow intermediate language when\na pattern can't be compiled. Pattern matching in statement position also\nnow benefits from the same compilation as expression position. (LANG-598)\u003c/li\u003e\n\u003cli\u003eImproved performance in highly parallel scans with many target files, running\non systems using the musl libc implementation. (pcre2-match-data-reuse)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWhen the internal semgrep-core RPC subprocess is terminated by a signal (for\nexample an out-of-memory kill or a segfault), Semgrep now logs a clear error\nnaming the signal, instead of the misleading \u0026quot;Expected a number, got ''\u0026quot;\nmessage. When debug logging is enabled, the tail of the subprocess's stderr is\nincluded as well. (rpc-subprocess-death-diagnostics)\u003c/li\u003e\n\u003cli\u003eA target file whose path filtering failed was silently omitted from the scan,\nappearing in neither the results nor the list of skipped targets. Such paths\nare now retried, and any that still fail are reported as skipped targets so\nthey show up in the scan report. (ENGINE-2854)\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/semgrep/semgrep/blob/develop/CHANGELOG.md\"\u003esemgrep's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.174.0\"\u003e1.174.0\u003c/a\u003e - 2026-08-20\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDiff scans now report which dependency source files were added or modified relative to the merge base. (changed-dependency-sources)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePartial scans (\u003ccode\u003e--x-partial-scan-rule-id\u003c/code\u003e) now resolve dependencies only for\nsubprojects whose ecosystem is evaluated by the rules being run. Subprojects in\nany other ecosystem are skipped and reported to semgrep-app as skipped\nsubprojects. (SC-3830)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.173.0\"\u003e1.173.0\u003c/a\u003e - 2026-08-12\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esemgrep-core -version\u003c/code\u003e now reports the git commit that the binary was built\nfrom. (core-version-git-sha)\u003c/li\u003e\n\u003cli\u003ePro: Added a \u003ccode\u003eno_disk_cache\u003c/code\u003e memory policy (\u003ccode\u003e--x-mem-policy no_disk_cache\u003c/code\u003e) to trade higher memory usage for not caching intermediary scan data structures on disk. (no-disk-cache-memory-policy)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFile targeting now submits path-filtering work to worker domains in batches\nremoving multithreaded synchronization overhead for very large repos. (ENGINE-2854)\u003c/li\u003e\n\u003cli\u003eParallel rule parsing for large rulesets now shards rules into files sized by\nbytes rather than by worker count, stabilizing memory allocations at parse-time\nand improving parsing throughput. (ENGINE-2920)\u003c/li\u003e\n\u003cli\u003eUpdated the Solidity parser for newer language features (transient storage, named mapping parameters, \u003ccode\u003elayout at\u003c/code\u003e, assembly flags, \u003ccode\u003eglobal\u003c/code\u003e using-directives, EVM Cancun builtins) and corrected ternary/\u003ccode\u003e?:\u003c/code\u003e vs member-access precedence. (LANG-207)\u003c/li\u003e\n\u003cli\u003ePro: Unsupported patterns in case expressions are now handled more\nrobustly, with improved error recovery during taint analysis — branch\nbodies are no longer dropped from the dataflow intermediate language when\na pattern can't be compiled. Pattern matching in statement position also\nnow benefits from the same compilation as expression position. (LANG-598)\u003c/li\u003e\n\u003cli\u003eImproved performance in highly parallel scans with many target files, running\non systems using the musl libc implementation. (pcre2-match-data-reuse)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWhen the internal semgrep-core RPC subprocess is terminated by a signal (for\nexample an out-of-memory kill or a segfault), Semgrep now logs a clear error\nnaming the signal, instead of the misleading \u0026quot;Expected a number, got ''\u0026quot;\nmessage. When debug logging is enabled, the tail of the subprocess's stderr is\nincluded as well. (rpc-subprocess-death-diagnostics)\u003c/li\u003e\n\u003cli\u003eA target file whose path filtering failed was silently omitted from the scan,\nappearing in neither the results nor the list of skipped targets. Such paths\nare now retried, and any that still fail are reported as skipped targets so\nthey show up in the scan report. (ENGINE-2854)\u003c/li\u003e\n\u003cli\u003eFixed a bug where a capture-group \u003ccode\u003emetavariable-regex\u003c/code\u003e or a binding-introducing\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/semgrep/semgrep/commit/829b72f16f5148e171059ed74518d2324294d1f1\"\u003e\u003ccode\u003e829b72f\u003c/code\u003e\u003c/a\u003e chore: release 1.174.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/3f58c662ec05a8dbb67d4779cfbca1be8396d738\"\u003e\u003ccode\u003e3f58c66\u003c/code\u003e\u003c/a\u003e feat(sca): add dependency_source_edited to run_scan return (semgrep/semgrep-p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/7ccb226f46172e486ccf3aa2522734c848f39447\"\u003e\u003ccode\u003e7ccb226\u003c/code\u003e\u003c/a\u003e feat(mal): SSC IR Scans Resolve Relevant Ecosystems Only (semgrep/semgrep-pro...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/808ee51cda4f91d118fab80a411522e2cbbdc2fe\"\u003e\u003ccode\u003e808ee51\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat: add severity to core json output\u0026quot; (semgrep/semgrep-proprietary#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/53e388494cee7a7f48ee7cc70004dc565d8f08e2\"\u003e\u003ccode\u003e53e3884\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6882\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/68f05877f5256789cd749fef536d1087231482de\"\u003e\u003ccode\u003e68f0587\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6875\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/cc97b5c47dacabe76be343ef981204b8c1f60e07\"\u003e\u003ccode\u003ecc97b5c\u003c/code\u003e\u003c/a\u003e fix: drop duplicate finding with unsubstituted metavariable (ENGINE-2932) (se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/f66f2da0ad7650a58b5bb601f2439ccc01f07d7b\"\u003e\u003ccode\u003ef66f2da\u003c/code\u003e\u003c/a\u003e fix(mcp): pin encoding and use replace to handle errors (semgrep/semgrep-prop...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/0e77f5bac7d5f84e044beab98fc2814cba245a9b\"\u003e\u003ccode\u003e0e77f5b\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6675\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/91b912403bb847ee3eabca43cb2fc15ef5f93152\"\u003e\u003ccode\u003e91b9124\u003c/code\u003e\u003c/a\u003e feat(core): show git commit sha in semgrep-core -version (semgrep/semgrep-pro...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/semgrep/semgrep/compare/v1.169.0...v1.174.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/twschiller/ma-agent-eval/pull/55","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/twschiller%2Fma-agent-eval/issues/55","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/55/packages"}},{"old_version":"6.0.5","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-28T22:37:03.000Z","version_change":"6.0.5 → 6.1.0","issue":{"uuid":"5282841140","node_id":"PR_kwDOS7Plt88AAAABBZP0KQ","number":31,"state":"closed","title":"Bump the dependencies group across 3 directories with 84 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-09-04T22:31:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-28T22:37:03.000Z","updated_at":"2026-09-04T22:31:04.000Z","time_to_close":604440,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"dependencies","update_count":84,"packages":[{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.1","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.5.1","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"coverage","old_version":"7.14.1","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django","old_version":"5.2.15","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-silk","old_version":"5.5.0","new_version":"5.5.2","repository_url":"https://github.com/jazzband/django-silk"},{"name":"django-stubs","old_version":"6.0.5","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-stubs-ext","old_version":"6.0.5","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-test-migrations","old_version":"1.5.0","new_version":"1.6.0","repository_url":"https://github.com/wemake-services/django-test-migrations"},{"name":"idna","old_version":"3.18","new_version":"3.19","repository_url":"https://github.com/kjd/idna"},{"name":"packaging","old_version":"26.2","new_version":"26.3","repository_url":"https://github.com/pypa/packaging"},{"name":"pip","old_version":"26.1.2","new_version":"26.2.1","repository_url":"https://github.com/pypa/pip"},{"name":"pip-tools","old_version":"7.5.3","new_version":"7.6.1","repository_url":"https://github.com/jazzband/pip-tools"},{"name":"prek","old_version":"0.4.4","new_version":"0.4.14","repository_url":"https://github.com/j178/prek"},{"name":"pygments","old_version":"2.20.0","new_version":"2.21.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"setuptools","old_version":"82.0.1","new_version":"84.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"sqlparse","old_version":"0.5.5","new_version":"0.6.0","repository_url":"https://github.com/andialbrecht/sqlparse"},{"name":"ty","old_version":"0.0.1a21","new_version":"0.0.73","repository_url":"https://github.com/astral-sh/ty"},{"name":"types-psycopg2","old_version":"2.9.21.20260518","new_version":"2.9.21.20260724","repository_url":"https://github.com/python/typeshed"},{"name":"types-pyyaml","old_version":"6.0.12.20260518","new_version":"6.0.12.20260815","repository_url":"https://github.com/python/typeshed"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"wheel","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/pypa/wheel"},{"name":"blessed","old_version":"1.44.0","new_version":"1.48.0","repository_url":"https://github.com/jquast/blessed"},{"name":"boto3","old_version":"1.43.23","new_version":"1.43.78","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.23","new_version":"1.43.78","repository_url":"https://github.com/boto/botocore"},{"name":"django-allauth","old_version":"65.14.3","new_version":"65.19.1","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1","repository_url":"https://github.com/anymail/django-anymail"},{"name":"django-filter","old_version":"25.2","new_version":"26.1","repository_url":"https://github.com/carltongibson/django-filter"},{"name":"django-js-asset","old_version":"3.1.2","new_version":"4.0.2","repository_url":"https://github.com/feincms/django-js-asset"},{"name":"django-maintenance-mode","old_version":"0.22.0","new_version":"0.23.0","repository_url":"https://github.com/fabiocaccamo/django-maintenance-mode"},{"name":"django-money","old_version":"3.6.0","new_version":"3.6.1","repository_url":"https://github.com/django-money/django-money"},{"name":"django-oauth-toolkit","old_version":"3.3.0","new_version":"3.4.1","repository_url":"https://github.com/django-oauth/django-oauth-toolkit"},{"name":"django-otp","old_version":"1.3.0","new_version":"1.7.0","repository_url":"https://github.com/django-otp/django-otp"},{"name":"django-q2","old_version":"1.10.0","new_version":"1.11.0","repository_url":"https://github.com/GDay/django-q2"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"dulwich","old_version":"1.2.6","new_version":"1.2.12","repository_url":"https://github.com/dulwich/dulwich"},{"name":"feedparser","old_version":"6.0.12","new_version":"6.0.14","repository_url":"https://github.com/kurtmckee/feedparser"},{"name":"fido2","old_version":"2.2.0","new_version":"2.2.1","repository_url":"https://github.com/Yubico/python-fido2"},{"name":"googleapis-common-protos","old_version":"1.75.0","new_version":"1.75.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.81.0","new_version":"1.83.0","repository_url":"https://github.com/grpc/grpc"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"icalendar","old_version":"7.1.2","new_version":"7.3.0","repository_url":"https://github.com/collective/icalendar"},{"name":"jinxed","old_version":"2.0.4","new_version":"2.1.0","repository_url":"https://github.com/Rockhopper-Technologies/jinxed"},{"name":"jwcrypto","old_version":"1.5.7","new_version":"1.5.8","repository_url":"https://github.com/latchset/jwcrypto"},{"name":"lxml","old_version":"6.1.1","new_version":"6.1.2","repository_url":"https://github.com/lxml/lxml"},{"name":"markdown","old_version":"3.10.2","new_version":"3.10.3","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"nh3","old_version":"0.3.5","new_version":"0.3.6","repository_url":"https://github.com/messense/nh3"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.42.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.42.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.42.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.63b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-dbapi","old_version":"0.63b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.42.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.63b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.63b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"platformdirs","old_version":"4.10.0","new_version":"4.11.3","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"prettytable","old_version":"3.17.0","new_version":"3.18.0","repository_url":"https://github.com/prettytable/prettytable"},{"name":"protobuf","old_version":"6.33.6","new_version":"7.36.0","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pypdf","old_version":"6.13.0","new_version":"6.16.1","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"pyphen","old_version":"0.17.2","new_version":"0.18.1","repository_url":"https://github.com/Kozea/Pyphen"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-fsutil","old_version":"0.16.1","new_version":"0.17.0","repository_url":"https://github.com/fabiocaccamo/python-fsutil"},{"name":"redis","old_version":"8.0.0","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"rpds-py","old_version":"2026.5.1","new_version":"2026.6.3","repository_url":"https://github.com/crate-py/rpds"},{"name":"s3transfer","old_version":"0.18.0","new_version":"0.19.2","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.61.1","new_version":"2.68.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"structlog","old_version":"25.5.0","new_version":"26.1.0","repository_url":"https://github.com/hynek/structlog"},{"name":"tablib","old_version":"3.9.0","new_version":"3.10.0","repository_url":"https://github.com/jazzband/tablib"},{"name":"tqdm","old_version":"4.68.1","new_version":"4.70.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"tzdata","old_version":"2026.2","new_version":"2026.3","repository_url":"https://github.com/python/tzdata"},{"name":"wcwidth","old_version":"0.7.0","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"webencodings","old_version":"0.5.1","new_version":"0.6.1","repository_url":"https://github.com/CourtBouillon/webencodings"},{"name":"wrapt","old_version":"1.17.3","new_version":"2.3.0","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"zopfli","old_version":"0.4.2","new_version":"0.4.3","repository_url":"https://github.com/fonttools/py-zopfli"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dependencies group with 1 update in the /contrib/dev_reqs directory: [jc](https://github.com/kellyjonbrazil/jc).\nBumps the dependencies group with 3 updates in the /docs directory: [mkdocs-git-revision-date-localized-plugin](https://github.com/timvink/mkdocs-git-revision-date-localized-plugin), [mkdocs-material](https://github.com/squidfunk/mkdocs-material) and [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings).\nBumps the dependencies group with 80 updates in the /src/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.7.22` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.1` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.5.1` |\n| [click](https://github.com/pallets/click) | `8.4.1` | `8.4.2` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.1` | `7.15.4` |\n| [django](https://github.com/django/django) | `5.2.15` | `6.1` |\n| [django-silk](https://github.com/jazzband/django-silk) | `5.5.0` | `5.5.2` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.5` | `6.1.0` |\n| [django-stubs-ext](https://github.com/typeddjango/django-stubs) | `6.0.5` | `6.1.0` |\n| [django-test-migrations](https://github.com/wemake-services/django-test-migrations) | `1.5.0` | `1.6.0` |\n| [idna](https://github.com/kjd/idna) | `3.18` | `3.19` |\n| [packaging](https://github.com/pypa/packaging) | `26.2` | `26.3` |\n| [pip](https://github.com/pypa/pip) | `26.1.2` | `26.2.1` |\n| [pip-tools](https://github.com/jazzband/pip-tools) | `7.5.3` | `7.6.1` |\n| [prek](https://github.com/j178/prek) | `0.4.4` | `0.4.14` |\n| [pygments](https://github.com/pygments/pygments) | `2.20.0` | `2.21.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `84.0.0` |\n| [sqlparse](https://github.com/andialbrecht/sqlparse) | `0.5.5` | `0.6.0` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.1a21` | `0.0.73` |\n| [types-psycopg2](https://github.com/python/typeshed) | `2.9.21.20260518` | `2.9.21.20260724` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20260518` | `6.0.12.20260815` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [wheel](https://github.com/pypa/wheel) | `0.47.0` | `0.48.0` |\n| [blessed](https://github.com/jquast/blessed) | `1.44.0` | `1.48.0` |\n| [boto3](https://github.com/boto/boto3) | `1.43.23` | `1.43.78` |\n| [botocore](https://github.com/boto/botocore) | `1.43.23` | `1.43.78` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.14.3` | `65.19.1` |\n| [django-anymail](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-filter](https://github.com/carltongibson/django-filter) | `25.2` | `26.1` |\n| [django-js-asset](https://github.com/feincms/django-js-asset) | `3.1.2` | `4.0.2` |\n| [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) | `0.22.0` | `0.23.0` |\n| [django-money](https://github.com/django-money/django-money) | `3.6.0` | `3.6.1` |\n| [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) | `3.3.0` | `3.4.1` |\n| [django-otp](https://github.com/django-otp/django-otp) | `1.3.0` | `1.7.0` |\n| [django-q2](https://github.com/GDay/django-q2) | `1.10.0` | `1.11.0` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `1.2.6` | `1.2.12` |\n| [feedparser](https://github.com/kurtmckee/feedparser) | `6.0.12` | `6.0.14` |\n| [fido2](https://github.com/Yubico/python-fido2) | `2.2.0` | `2.2.1` |\n| [googleapis-common-protos](https://github.com/googleapis/google-cloud-python) | `1.75.0` | `1.75.1` |\n| [grpcio](https://github.com/grpc/grpc) | `1.81.0` | `1.83.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [icalendar](https://github.com/collective/icalendar) | `7.1.2` | `7.3.0` |\n| [jinxed](https://github.com/Rockhopper-Technologies/jinxed) | `2.0.4` | `2.1.0` |\n| [jwcrypto](https://github.com/latchset/jwcrypto) | `1.5.7` | `1.5.8` |\n| [lxml](https://github.com/lxml/lxml) | `6.1.1` | `6.1.2` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.10.2` | `3.10.3` |\n| [nh3](https://github.com/messense/nh3) | `0.3.5` | `0.3.6` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.42.1` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.42.1` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.42.1` | `1.44.0` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.63b1` | `0.65b0` |\n| [opentelemetry-instrumentation-dbapi](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.63b1` | `0.65b0` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.42.1` | `1.44.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.63b1` | `0.65b0` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.63b1` | `0.65b0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.10.0` | `4.11.3` |\n| [prettytable](https://github.com/prettytable/prettytable) | `3.17.0` | `3.18.0` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.6` | `7.36.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.13.0` | `6.16.1` |\n| [pyphen](https://github.com/Kozea/Pyphen) | `0.17.2` | `0.18.1` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [python-fsutil](https://github.com/fabiocaccamo/python-fsutil) | `0.16.1` | `0.17.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.0` | `8.1.0` |\n| [rpds-py](https://github.com/crate-py/rpds) | `2026.5.1` | `2026.6.3` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.18.0` | `0.19.2` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.61.1` | `2.68.0` |\n| [structlog](https://github.com/hynek/structlog) | `25.5.0` | `26.1.0` |\n| [tablib](https://github.com/jazzband/tablib) | `3.9.0` | `3.10.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.1` | `4.70.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.2` | `2026.3` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.7.0` | `0.8.2` |\n| [webencodings](https://github.com/CourtBouillon/webencodings) | `0.5.1` | `0.6.1` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `1.17.3` | `2.3.0` |\n| [zopfli](https://github.com/fonttools/py-zopfli) | `0.4.2` | `0.4.3` |\n\n\nUpdates `jc` from 1.25.6 to 1.25.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kellyjonbrazil/jc/releases\"\u003ejc's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eJC version 1.25.7\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e, and \u003ccode\u003etsv-ih\u003c/code\u003e file parsers for CSV files without headers,\nTSV files, and TSV files without headers. Note that these are standard and\nnot streaming parsers so the entire CSV/TSV will be loaded into memory. For\nlazy loading equivalents, see below.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih-s\u003c/code\u003e, \u003ccode\u003etsv-s\u003c/code\u003e, and \u003ccode\u003etsv-ih-s\u003c/code\u003e streaming file parsers for CSV files\nwithout headers, TSV files, and TSV files without headers. These streaming\nparsers will lazily load the data into memory and may be more suitable for\nextremely large files.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etypeset\u003c/code\u003e and \u003ccode\u003edeclare\u003c/code\u003e Bash internal command parser to convert variables\nsimple arrays, and associative arrays along with object metadata\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003epip-show\u003c/code\u003e command parser to add \u003ccode\u003e-f\u003c/code\u003e show files support\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003ersync\u003c/code\u003e and \u003ccode\u003ersync-s\u003c/code\u003e parsers to add \u003ccode\u003e--stats\u003c/code\u003e or \u003ccode\u003e--info=stats[1-3]\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecertbot\u003c/code\u003e command parser to allow parsing of named certs\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edir\u003c/code\u003e command parser for incorrect stripping of the \u003ccode\u003eD:\u003c/code\u003e drive letter\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ehashsum\u003c/code\u003e command parser to correctly parse the \u003ccode\u003emode\u003c/code\u003e indicator\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eifconfig\u003c/code\u003e command parser for incorrect stripping of leading zeros in some hex numbers\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eiptables\u003c/code\u003e command parser when Target is blank and verbose output is used\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsattr\u003c/code\u003e command parser for filenames with spaces (newlines in filenames are\nstill not supported)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eproc-pid-smaps\u003c/code\u003e proc parser when unknown VmFlags are output\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ejc.utils.timestamp\u003c/code\u003e function and tests for behavior change in python 3.15\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eufw\u003c/code\u003e command parser to support rule logging. A new boolean \u003ccode\u003elog\u003c/code\u003e field is introduced\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/kellyjonbrazil/jc/blob/master/CHANGELOG\"\u003ejc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ejc changelog\u003c/p\u003e\n\u003cp\u003e20260617 v1.25.7\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e, and \u003ccode\u003etsv-ih\u003c/code\u003e file parsers for CSV files without headers,\nTSV files, and TSV files without headers. Note that these are standard and\nnot streaming parsers so the entire CSV/TSV will be loaded into memory. For\nlazy loading equivalents, see below.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih-s\u003c/code\u003e, \u003ccode\u003etsv-s\u003c/code\u003e, and \u003ccode\u003etsv-ih-s\u003c/code\u003e streaming file parsers for CSV files\nwithout headers, TSV files, and TSV files without headers. These streaming\nparsers will lazily load the data into memory and may be more suitable for\nextremely large files.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etypeset\u003c/code\u003e and \u003ccode\u003edeclare\u003c/code\u003e Bash internal command parser to convert variables\nsimple arrays, and associative arrays along with object metadata\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003epip-show\u003c/code\u003e command parser to add \u003ccode\u003e-f\u003c/code\u003e show files support\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003ersync\u003c/code\u003e and \u003ccode\u003ersync-s\u003c/code\u003e parsers to add \u003ccode\u003e--stats\u003c/code\u003e or \u003ccode\u003e--info=stats[1-3]\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecertbot\u003c/code\u003e command parser to allow parsing of named certs\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edir\u003c/code\u003e command parser for incorrect stripping of the \u003ccode\u003eD:\u003c/code\u003e drive letter\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ehashsum\u003c/code\u003e command parser to correctly parse the \u003ccode\u003emode\u003c/code\u003e indicator\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eifconfig\u003c/code\u003e command parser for incorrect stripping of leading zeros in some hex numbers\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eiptables\u003c/code\u003e command parser when Target is blank and verbose output is used\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsattr\u003c/code\u003e command parser for filenames with spaces (newlines in filenames are\nstill not supported)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eproc-pid-smaps\u003c/code\u003e proc parser when unknown VmFlags are output\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ejc.utils.timestamp\u003c/code\u003e function and tests for behavior change in python 3.15\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eufw\u003c/code\u003e command parser to support rule logging. A new boolean \u003ccode\u003elog\u003c/code\u003e field is introduced\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20251012 v1.25.6\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003enet-localgroup\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enet-user\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eroute-print\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etraceroute-s\u003c/code\u003e streaming command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003emax_hops\u003c/code\u003e and \u003ccode\u003edata_bytes\u003c/code\u003e fields to \u003ccode\u003etraceroute\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ex509-crl\u003c/code\u003e file parser to support Certificate Revocation List PEM and DER files\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eyay\u003c/code\u003e as a magic command for the \u003ccode\u003epacman\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebluetoothctl\u003c/code\u003e command parser to support output with the \u003ccode\u003ecable_pairing\u003c/code\u003e attribute\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enmcli\u003c/code\u003e command parser to support blank \u003ccode\u003eteam.config\u003c/code\u003e JSON value and \u003ccode\u003eteam-port.config\u003c/code\u003e JSON value\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003etop\u003c/code\u003e command parsers to correct memory size field parsing. Several new unit\nand byte conversion fields have been added\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ewho\u003c/code\u003e command parser to support the \u003ccode\u003eprocess\u003c/code\u003e field on Debian13\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20250503 v1.25.5\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eamixer\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003eiptables\u003c/code\u003e command parser to add default policy statistics fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebluetoothctl\u003c/code\u003e parser failing to parse controllers with power state prop\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsblk\u003c/code\u003e command parser to support multiple mountpoints. Also, added\nbyte conversions for size fields.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enmcli\u003c/code\u003e command parser to support \u003ccode\u003eteam.config\u003c/code\u003e JSON field\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003etime\u003c/code\u003e command parser for output that does not contain centiseconds\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ex509-cert\u003c/code\u003e parser to handle IDNA2008 encoded email addresses with a warning\u003c/li\u003e\n\u003cli\u003eFix typing for upcoming python v3.14\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/kellyjonbrazil/jc/commit/8290734a87a30e5f0af7e1fba5ecbda2e1c145a8\"\u003e\u003ccode\u003e8290734\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/712\"\u003e#712\u003c/a\u003e from kellyjonbrazil/dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/9d11e1fe5bbdfb9f68b001940a7ae235b68db637\"\u003e\u003ccode\u003e9d11e1f\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/3a2946b6584f2128917ffe908f749498b8c5ea5c\"\u003e\u003ccode\u003e3a2946b\u003c/code\u003e\u003c/a\u003e add streaming csv-ih, tsv, and tsv-ih parsers with doc fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/22ff0e33c3957c929d45864cc9790b8f7b6fe9c8\"\u003e\u003ccode\u003e22ff0e3\u003c/code\u003e\u003c/a\u003e fix for python 3.15 behavior changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/fab550e3b8fef49abe297c5ac4f0b2f9b330d3a9\"\u003e\u003ccode\u003efab550e\u003c/code\u003e\u003c/a\u003e docs: fix typos (\u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/711\"\u003e#711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/6e79f08c9083836467711e6965f5ca18b1505674\"\u003e\u003ccode\u003e6e79f08\u003c/code\u003e\u003c/a\u003e Add TSV alias and CSV/TSV \u0026quot;No Header\u0026quot; alias (\u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/709\"\u003e#709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/900aed5d880f2c1150739976bfbfb1f87e64cbc9\"\u003e\u003ccode\u003e900aed5\u003c/code\u003e\u003c/a\u003e fix tests and update docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/676695eacf75aa01920b89bb1809ee96e47d20bb\"\u003e\u003ccode\u003e676695e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/701\"\u003e#701\u003c/a\u003e from jeffdyke/feature/certs-with-cert-name\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/30c75073044dd364174b080709e9fb6c870ce82e\"\u003e\u003ccode\u003e30c7507\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/7d801f30bb9b35b60938c193d76227f5a3473b50\"\u003e\u003ccode\u003e7d801f3\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kellyjonbrazil/jc/compare/v1.25.6...v1.25.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-git-revision-date-localized-plugin` from 1.5.3 to 1.5.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/releases\"\u003emkdocs-git-revision-date-localized-plugin's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.4\u003c/h2\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eRaises the \u003ccode\u003egitpython\u003c/code\u003e floor from \u003ccode\u003e\u0026gt;=3.1.44\u003c/code\u003e to \u003ccode\u003e\u0026gt;=3.1.59\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eEarlier dependabot bumps only touched this repo's \u003ccode\u003euv.lock\u003c/code\u003e, which pins the CI\nenvironment and nothing else. Downstream users installing from PyPI resolved\nagainst \u003ccode\u003epyproject.toml\u003c/code\u003e, so they could still land on a GitPython carrying the\n2026 option-injection advisories — GHSA-wvpp-8hx9-p66j and GHSA-jm78-9fvv-mhgr\namong them, all patched by 3.1.58, with further option hardening in 3.1.59.\u003c/p\u003e\n\u003cp\u003eThis plugin never passes user input as git options, so it was not exploitable\nthrough those. The floor bump forces the upgrade in environments that already\nhold an older GitPython, and clears the warnings downstream scanners report.\u003c/p\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/nucleus-ffm\"\u003e\u003ccode\u003e@​nucleus-ffm\u003c/code\u003e\u003c/a\u003e for reporting it in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/222\"\u003e#222\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eMaintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden test git repos against flaky \u0026quot;Error building trees\u0026quot; failures by \u003ca href=\"https://github.com/timvink\"\u003e\u003ccode\u003e@​timvink\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/212\"\u003e#212\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: update GitHub Actions to Node 24 compatible versions by \u003ca href=\"https://github.com/timvink\"\u003e\u003ccode\u003e@​timvink\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/213\"\u003e#213\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edeps: bump idna and pymdown-extensions to patch security alerts by \u003ca href=\"https://github.com/timvink\"\u003e\u003ccode\u003e@​timvink\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/214\"\u003e#214\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump gitpython from 3.1.50 to 3.1.58 in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/217\"\u003e#217\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/219\"\u003e#219\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/220\"\u003e#220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pymdown-extensions from 10.21.3 to 11.0.1 in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/218\"\u003e#218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/221\"\u003e#221\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.3...v1.5.4\"\u003ehttps://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.3...v1.5.4\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/a2313a306eaf9b92f0f0a27bfbd2eb44a9f847e2\"\u003e\u003ccode\u003ea2313a3\u003c/code\u003e\u003c/a\u003e Bump version to 1.5.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/b1be777c7ae9d1a5055a5dc452a48883dcbc2a64\"\u003e\u003ccode\u003eb1be777\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions from 11.0 to 11.0.1 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/221\"\u003e#221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/fd6e3b09e0b956fb93de0661ac9f8d3fa1aa1e8b\"\u003e\u003ccode\u003efd6e3b0\u003c/code\u003e\u003c/a\u003e Bump gitpython from 3.1.57 to 3.1.58 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/220\"\u003e#220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/0c308d5d3b6a7eb26aaa56b9d9a969622a4d7108\"\u003e\u003ccode\u003e0c308d5\u003c/code\u003e\u003c/a\u003e Bump gitpython from 3.1.54 to 3.1.57 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/219\"\u003e#219\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/75279a9252eed9f1558c56205c769b6f3cac3564\"\u003e\u003ccode\u003e75279a9\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions from 10.21.3 to 11.0 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/218\"\u003e#218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/7756feed9b64716d4d8fe5e2472abe3d99b1cc27\"\u003e\u003ccode\u003e7756fee\u003c/code\u003e\u003c/a\u003e Bump gitpython from 3.1.50 to 3.1.54 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/217\"\u003e#217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/0c2e203a79b63e5e1980eb209459cddf5fa8ec4e\"\u003e\u003ccode\u003e0c2e203\u003c/code\u003e\u003c/a\u003e deps: bump idna and pymdown-extensions to patch security alerts (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/214\"\u003e#214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/aa44586a9077b7aad533ddfd9872c105ffd9a1a7\"\u003e\u003ccode\u003eaa44586\u003c/code\u003e\u003c/a\u003e ci: update GitHub Actions to Node 24 compatible versions (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/213\"\u003e#213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/58eb93017772c7eb73b3f5bc239f1d2f7380e3d2\"\u003e\u003ccode\u003e58eb930\u003c/code\u003e\u003c/a\u003e Harden test git repos against flaky 'Error building trees' failures (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/212\"\u003e#212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.3...v1.5.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-material` from 9.7.6 to 9.7.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/squidfunk/mkdocs-material/releases\"\u003emkdocs-material's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003emkdocs-material-9.7.7\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial for MkDocs is approaching end of life\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eMaterial for MkDocs is scheduled to reach end of life on November 5, 2026. Until then, maintenance is limited to critical bug fixes and security updates. After this date, the project will remain available on PyPI and GitHub, but no further maintenance is planned except in exceptional circumstances.\u003c/p\u003e\n\u003cp\u003eFor users looking for a long-term, actively developed successor, we're building \u003ca href=\"https://zensical.org\"\u003eZensical\u003c/a\u003e – a next-generation static site generator designed for technical documentation. If you're planning a new documentation project or evaluating your long-term options, we invite you to take a look.\u003c/p\u003e\n\u003cp\u003eOrganizations requiring support beyond this date are welcome to get in touch to discuss available options.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\"\u003eRead the full announcement on our blog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a DOM-based XSS vulnerability in search suggestions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/p\"\u003e\u003ccode\u003e@​p\u003c/code\u003e\u003c/a\u003e- for responsibly reporting this issue.\u003c/p\u003e\n\u003c/blockquote\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/squidfunk/mkdocs-material/blob/master/CHANGELOG\"\u003emkdocs-material's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003emkdocs-material-9.7.7 (2026-07-17)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed DOM-based XSS vulnerability in search suggestions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.6 (2026-03-19)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAutomatically disable MkDocs 2.0 warning for forks of MkDocs\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.5 (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eLimited version range of mkdocs to \u0026lt;2\u003c/li\u003e\n\u003cli\u003eUpdated MkDocs 2.0 incompatibility warning (clarify relation with MkDocs)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.4 (2026-03-03)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHardened social cards plugin by switching to sandboxed environment\u003c/li\u003e\n\u003cli\u003eUpdated MkDocs 2.0 incompatibility warning\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.3 (2026-02-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8567\"\u003e#8567\u003c/a\u003e: Print MkDocs 2.0 incompatibility warning to stderr\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.2 (2026-02-18)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eOpened up version ranges of optional dependencies for forward-compatibility\u003c/li\u003e\n\u003cli\u003eAdded warning to 'mkdocs build' about impending MkDocs 2.0 incompatibility\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.1 (2025-12-18)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated requests to 2.30+ to mitigate CVE in urllib\u003c/li\u003e\n\u003cli\u003eFixed privacy plugin not picking up protocol-relative URLs\u003c/li\u003e\n\u003cli\u003eFixed \u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8542\"\u003e#8542\u003c/a\u003e: false positives and negatives captured in privacy plugin\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.0 (2025-11-11)\u003c/p\u003e\n\u003cp\u003e⚠️ Material for MkDocs is now in maintenance mode\u003c/p\u003e\n\u003cp\u003eThis is the last release of Material for MkDocs that will receive new features.\nGoing forward, the Material for MkDocs team focuses on Zensical, a next-gen\nstatic site generator built from first principles. We will provide critical\nbug fixes and security updates for Material for MkDocs for 12 months at least.\u003c/p\u003e\n\u003cp\u003eRead the full announcement on our blog:\n\u003ca href=\"https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\"\u003ehttps://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis release includes all features that were previously exclusive to the\nInsiders edition. These features are now freely available to everyone.\u003c/p\u003e\n\u003cp\u003eNote on deprecated plugins: The projects and typeset plugins are included in\nthis release, but must be considered deprecated. Both plugins proved\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/squidfunk/mkdocs-material/commit/b3e6dd886a974aa8200759ecfd7db28c598a2894\"\u003e\u003ccode\u003eb3e6dd8\u003c/code\u003e\u003c/a\u003e Prepare 9.7.7 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/52fb6be8aafe326419f34dc94d3211e7bbfbfb25\"\u003e\u003ccode\u003e52fb6be\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/901e6335cc80b0f12e46a1e34bd85e983dd78a6e\"\u003e\u003ccode\u003e901e633\u003c/code\u003e\u003c/a\u003e Added \u003ccode\u003eSECURITY.md\u003c/code\u003e with EOL notice\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/5b36f2ac499a45905e246bc66bbee2858ef6556f\"\u003e\u003ccode\u003e5b36f2a\u003c/code\u003e\u003c/a\u003e Bump js-yaml from 4.1.1 to 4.2.0 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8598\"\u003e#8598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/2d11e7bc92c59b86d6ac0da2e38044fb4befa6e0\"\u003e\u003ccode\u003e2d11e7b\u003c/code\u003e\u003c/a\u003e Bump form-data from 3.0.4 to 3.0.5 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8597\"\u003e#8597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/ae05a534a8c8e1c58eb6aa55d460d309bcfce22b\"\u003e\u003ccode\u003eae05a53\u003c/code\u003e\u003c/a\u003e Bump esbuild from 0.27.2 to 0.28.1 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8596\"\u003e#8596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/434af93166e5b90b78bba1295ca5a140fc67d0bc\"\u003e\u003ccode\u003e434af93\u003c/code\u003e\u003c/a\u003e Bump shell-quote from 1.7.3 to 1.8.4 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8593\"\u003e#8593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/4447cdadcbe8bc82570e9f1ae2b970f461b03b68\"\u003e\u003ccode\u003e4447cda\u003c/code\u003e\u003c/a\u003e Documentation (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8590\"\u003e#8590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/8f8d551c9c5296dfc2a5ede35047bfb491d66bc9\"\u003e\u003ccode\u003e8f8d551\u003c/code\u003e\u003c/a\u003e Updated copyright year (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8588\"\u003e#8588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/08d8514d491782b4ac46673bcfdedb2f6fc85f3d\"\u003e\u003ccode\u003e08d8514\u003c/code\u003e\u003c/a\u003e Bump fast-uri from 3.0.3 to 3.1.2 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8587\"\u003e#8587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/squidfunk/mkdocs-material/compare/9.7.6...9.7.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.4 to 1.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\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/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\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/mkdocstrings/mkdocstrings/commit/9a11dcb8e9b39ff6e1a22abdd362350de4e68e9f\"\u003e\u003ccode\u003e9a11dcb\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e\u003ccode\u003e4732798\u003c/code\u003e\u003c/a\u003e fix: Stop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ecbaa9a05dde5bdc83accf8814fa1c9a1ffe1473\"\u003e\u003ccode\u003eecbaa9a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/64260f748f3db8b301a9d6fa05b2609ab6f6876c\"\u003e\u003ccode\u003e64260f7\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003e\u003ccode\u003eacc0da3\u003c/code\u003e\u003c/a\u003e fix: Parse inventory project and version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ec45a9b7a1301a4c70e02e6c92e1b9caff6df61f\"\u003e\u003ccode\u003eec45a9b\u003c/code\u003e\u003c/a\u003e ci: Fix warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ce2199c5195535f8c3b4907dd3ac7de2181925cc\"\u003e\u003ccode\u003ece2199c\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README (\u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/823\"\u003e#823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asgiref` from 3.11.1 to 3.12.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/asgiref/blob/main/CHANGELOG.txt\"\u003easgiref's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.1 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRestored the previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape, which was\nrelied on by some APM services. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/572\"\u003e#572\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNote, this change was available whilst maintaining the underlying fix (from\n\u003ca href=\"https://redirect.github.com/django/asgiref/issues/564\"\u003e#564\u003c/a\u003e). It does not constitute an API stability promise. Ideally APMs are\n\u003cem\u003enot\u003c/em\u003e monkey patching internal APIs, and future changes will be made here if\nneeded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12.0 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAsyncToSync\u003c/code\u003e no longer captures the running event loop on\ninstantiation. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis resolves a series of deadlocks that users experienced after asgiref 3.9.0,\nparticularly with pytest-asyncio. pytest-asyncio stops the event loop between\ntests, and long-running unawaited futures could find themselves trying to\nschedule work onto a stopped loop, and so would never complete. Ideally, code\nshould be structured to await long-running futures before returning, but this\nchange should help users experiencing issues here.\u003c/p\u003e\n\u003cp\u003eThe loop is now resolved when the callable is invoked rather than when it is\ncreated. If \u003ccode\u003easync_to_sync\u003c/code\u003e is called from within \u003ccode\u003esync_to_async\u003c/code\u003e, the\nparent event loop is still used, as before.\u003c/p\u003e\n\u003cp\u003eThe possibility of deadlock therefore remains in some nested patterns. For\nexample, an async function may call a long-running \u003ccode\u003esync_to_async\u003c/code\u003e function\nthat itself uses \u003ccode\u003easync_to_sync\u003c/code\u003e; if the outer function returns before the\nsync future completes, the parent event loop may already be stopped, and the\nnested calls cannot be driven to completion.\u003c/p\u003e\n\u003cp\u003eThis is not a bug in asgiref — the same patterns deadlock in plain asyncio. As\nabove, restructure your code to await the \u003ccode\u003esync_to_async\u003c/code\u003e future before\nexiting the driving coroutine.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an event loop deadlock when exiting \u003ccode\u003eThreadSensitiveContext\u003c/code\u003e\nwhile its executor thread was still blocked waiting on the event loop.\n(\u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for EOL Python 3.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eStatelessServer.run()\u003c/code\u003e failing on Python 3.14, where\n\u003ccode\u003easyncio.get_event_loop()\u003c/code\u003e no longer creates an event loop if none\nexists. It now uses \u003ccode\u003easyncio.run()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/559\"\u003e#559\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eLocal\u003c/code\u003e leaking data between unrelated sync threads when\n\u003ccode\u003esys.flags.thread_inherit_context\u003c/code\u003e is enabled (Python 3.14+), so a newly\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/ef9d4b8b371cf8a7bb63dea3d0fdc60923e9e081\"\u003e\u003ccode\u003eef9d4b8\u003c/code\u003e\u003c/a\u003e Releasing 3.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/34fba6328f67a753d814c280811fd34094bd1f6c\"\u003e\u003ccode\u003e34fba63\u003c/code\u003e\u003c/a\u003e Restore previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a43900c131874be571c6afdca642d4054eed0acf\"\u003e\u003ccode\u003ea43900c\u003c/code\u003e\u003c/a\u003e Separate mypy from tests extra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/1b7c338591054c04ff6c140d899ced28b803b4e0\"\u003e\u003ccode\u003e1b7c338\u003c/code\u003e\u003c/a\u003e Releasing 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/157d9d4168434d73b1bb5a619f947b74ccbf1fc8\"\u003e\u003ccode\u003e157d9d4\u003c/code\u003e\u003c/a\u003e Renovate precommit (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/deda0d4fd8d3997dddd9646dd9ef7e0b6d3e59a5\"\u003e\u003ccode\u003ededa0d4\u003c/code\u003e\u003c/a\u003e Test free-threading builds and fix Local data leak for thread_inherit_context...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a54250a24ad770616d3afcc37af3186558562041\"\u003e\u003ccode\u003ea54250a\u003c/code\u003e\u003c/a\u003e Don’t capture the event loop in \u003ccode\u003eAsyncToSync.__init__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/836356a2802247a0963177197b50cbd7476d7950\"\u003e\u003ccode\u003e836356a\u003c/code\u003e\u003c/a\u003e Use asyncio.run in StatelessServer.run (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/e04afd54ba29bb277ba6177dc898c73c129446f3\"\u003e\u003ccode\u003ee04afd5\u003c/code\u003e\u003c/a\u003e Dropped support for Python 3.9. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/543\"\u003e#543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/95d2430a346be7f40652d2eabff84fe54fbc725d\"\u003e\u003ccode\u003e95d2430\u003c/code\u003e\u003c/a\u003e Fixed \u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e: ThreadSensitiveContext.\u003cstrong\u003eaexit\u003c/strong\u003e blocking the event loop. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/563\"\u003e#563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/asgiref/compare/3.11.1...3.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.5.20 to 2026.7.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f4bc676bc101fe2235846e37044e8c693d6cbaf4\"\u003e\u003ccode\u003ef4bc676\u003c/code\u003e\u003c/a\u003e 2026.07.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/428\"\u003e#428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/4c91f9c5f9b4676d40d2930025ba04d80dd536f6\"\u003e\u003ccode\u003e4c91f9c\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.3.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/01a66c5cf32eadb8f03a0504c24cb44f6d581248\"\u003e\u003ccode\u003e01a66c5\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/eb355f41cb71f71012ecf1a4d27a57d0ee2b1337\"\u003e\u003ccode\u003eeb355f4\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/474e6fc996d55b91632248da0bade702504e62dc\"\u003e\u003ccode\u003e474e6fc\u003c/code\u003e\u003c/a\u003e Include tests in the source distribution (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/424\"\u003e#424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a31ef39bb5906af7dc9729890f7e4e04e75afdae\"\u003e\u003ccode\u003ea31ef39\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/98eb2c76a9c7a8519912023dca00f762bbcd59af\"\u003e\u003ccode\u003e98eb2c7\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.3 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.05.20...2026.07.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMinimize internal Python API usage for interpreter and thread state sampling where possible. Avoids breaking ABI change in Python \u0026gt;= 3.15.0b4 (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/pull/269\"\u003epython-cffi/cffi#269\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\"\u003ehttps://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/fd33e7700f0ebafe6f30bd5053f13327221b77a2\"\u003e\u003ccode\u003efd33e77\u003c/code\u003e\u003c/a\u003e New release 2.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/56a7876b8cd3b2d8148233a90e0121d74cd83852\"\u003e\u003ccode\u003e56a7876\u003c/code\u003e\u003c/a\u003e Use PyGILState_Ensure to avoid accessing CPython internals (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/269\"\u003e#269\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.5.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/e239bdc5cc1eb1f0db08d4046ad531f805dbea71\"\u003e\u003ccode\u003ee239bdc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/795\"\u003e#795\u003c/a\u003e from jawah/release-3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/648ad776db64a00aa7efd70a94656ac43784abb3\"\u003e\u003ccode\u003e648ad77\u003c/code\u003e\u003c/a\u003e docs: update faq\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fab27492c39baa61aca12826022e266781108570\"\u003e\u003ccode\u003efab2749\u003c/code\u003e\u003c/a\u003e docs: write changelog for 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/7d32774e75d16cccd3d22c758a77fca135952787\"\u003e\u003ccode\u003e7d32774\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/9a69f609f254ba4bfe9d0cbf375728e43360cdf2\"\u003e\u003ccode\u003e9a69f60\u003c/code\u003e\u003c/a\u003e docs: update data/info\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5dcc6dd81a8a0a4bd525f8d6f508da8285caf402\"\u003e\u003ccode\u003e5dcc6dd\u003c/code\u003e\u003c/a\u003e perf: charinfo cache access optimization in cython\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/ea3b4479270762be1228562c590e5a212727f208\"\u003e\u003ccode\u003eea3b447\u003c/code\u003e\u003c/a\u003e fix: do not validate-decode large payload when md says it's noise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a05917f87b5f71d6022d8abe2b0af239f65c1111\"\u003e\u003ccode\u003ea05917f\u003c/code\u003e\u003c/a\u003e chore: allow setuptools 84 builds (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/3325d87c3c73fa1a8746947151faaf9a41177543\"\u003e\u003ccode\u003e3325d87\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/792\"\u003e#792\u003c/a\u003e from jawah/update-cibuildwheel-action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/77203b104216a6d578a682b5ac0514750aa988f7\"\u003e\u003ccode\u003e77203b1\u003c/code\u003e\u003c/a\u003e chore: reformat noxfile.py\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.1 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.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/click/8.4.2/\"\u003ehttps://pypi.org/project/click/8.4.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/34\"\u003ehttps://github.com/pallets/click/milestone/34\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by \u003ca href=\"https://redirect.github.com/pallets/click/issues/3126\"\u003e#3126\u003c/a\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3502\"\u003e#3502\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3043\"\u003e#3043\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3504\"\u003e#3504\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3508\"\u003e#3508\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3509\"\u003e#3509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3059\"\u003e#3059\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3242\"\u003e#3242\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2542\"\u003e#2542\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3534\"\u003e#3534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from \u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3533\"\u003e#3533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2331\"\u003e#2331\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1884\"\u003e#1884\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3125\"\u003e#3125\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\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/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-06-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by {pr}\u003ccode\u003e3126\u003c/code\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. {issue}\u003ccode\u003e3502\u003c/code\u003e\n{issue}\u003ccode\u003e3043\u003c/code\u003e {pr}\u003ccode\u003e3504\u003c/code\u003e {pr}\u003ccode\u003e3508\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. {pr}\u003ccode\u003e3509\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n{issue}\u003ccode\u003e3059\u003c/code\u003e {pr}\u003ccode\u003e3507\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. {issue}\u003ccode\u003e3242\u003c/code\u003e {issue}\u003ccode\u003e2542\u003c/code\u003e {pr}\u003ccode\u003e3534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from {pr}\u003ccode\u003e3482\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e\n{pr}\u003ccode\u003e3533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. {pr}\u003ccode\u003e3578\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. {issue}\u003ccode\u003e2331\u003c/code\u003e {issue}\u003ccode\u003e1884\u003c/code\u003e {issue}\u003ccode\u003e3125\u003c/code\u003e {pr}\u003ccode\u003e3582\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/click/commit/b2e30a175449cfda909ee4fbf4a29a6a071cad53\"\u003e\u003ccode\u003eb2e30a1\u003c/code\u003e\u003c/a\u003e Release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/7a16b20e8a8a9bb57c7b4f6f15f60f6597478a49\"\u003e\u003ccode\u003e7a16b20\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when module differs from distribution name (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bec59289d8cf9b9b4010642b2fee483e5f8eeefc\"\u003e\u003ccode\u003ebec5928\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when top-level module differs from distribution...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/916883afad450c0c9bbc4212817900949131adbd\"\u003e\u003ccode\u003e916883a\u003c/code\u003e\u003c/a\u003e Fix tests to not rely on \u003ccode\u003e-Wdefault\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3591\"\u003e#3591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/09195f6a92972c4e1bbb5493686456e6ba624520\"\u003e\u003ccode\u003e09195f6\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1557e265222c431b1e4d6c4dd6754006ed10dc02\"\u003e\u003ccode\u003e1557e26\u003c/code\u003e\u003c/a\u003e Check for warning exception with idiomatic context manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d9ff13369ac78d9acff693faa79f26badd566ab3\"\u003e\u003ccode\u003ed9ff133\u003c/code\u003e\u003c/a\u003e Static typing improvements in \u003ccode\u003eclick.shell_completion\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3460\"\u003e#3460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/762c97eef7c1b3779678992f26a553a2a8c80793\"\u003e\u003ccode\u003e762c97e\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8929d392781c8113bc569f388c15c47b94f86581\"\u003e\u003ccode\u003e8929d39\u003c/code\u003e\u003c/a\u003e Convert changes to markdown. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3559\"\u003e#3559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/237be507dbe3e653f6b41b3ea53266805534e8cd\"\u003e\u003ccode\u003e237be50\u003c/code\u003e\u003c/a\u003e Move changes headings down a level.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.4.1...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.14.1 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.0 — 2026-07-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSince 7.14.0, reporting commands implicitly combine parallel data files. Now those commands have a new option \u003ccode\u003e--keep-combined\u003c/code\u003e to retain the data files after combining them instead of the default, which is to delete them. Finishes \u003ca href=\"https://redirect.g...\n\n_Description has been truncated_","html_url":"https://github.com/RapariyaDeenu/InvenTree/pull/31","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/RapariyaDeenu%2FInvenTree/issues/31","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/31/packages"}},{"old_version":"6.0.2","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-28T21:33:44.000Z","version_change":"6.0.2 → 6.1.0","issue":{"uuid":"5282451268","node_id":"PR_kwDOSHaDgc8AAAABBY7_-Q","number":34,"state":"closed","title":"Bump the dependencies group across 2 directories with 108 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-09-04T21:32:12.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-28T21:33:44.000Z","updated_at":"2026-09-04T21:32:14.000Z","time_to_close":604708,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"dependencies","update_count":108,"packages":[{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"build","old_version":"1.4.2","new_version":"1.5.0","repository_url":"https://github.com/pypa/build"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.1","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.5.1","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.3.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"coverage","old_version":"7.13.5","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"distlib","old_version":"0.4.0","new_version":"0.4.3","repository_url":"https://github.com/pypa/distlib"},{"name":"django","old_version":"5.2.13","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-silk","old_version":"5.5.0","new_version":"5.5.2","repository_url":"https://github.com/jazzband/django-silk"},{"name":"django-stubs","old_version":"6.0.2","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-stubs-ext","old_version":"6.0.2","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-test-migrations","old_version":"1.5.0","new_version":"1.6.0","repository_url":"https://github.com/wemake-services/django-test-migrations"},{"name":"django-types","old_version":"0.23.0","new_version":"0.24.0","repository_url":"https://github.com/sbdchd/django-types"},{"name":"filelock","old_version":"3.25.2","new_version":"3.32.3","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"identify","old_version":"2.6.18","new_version":"2.6.19","repository_url":"https://github.com/pre-commit/identify"},{"name":"idna","old_version":"3.11","new_version":"3.19","repository_url":"https://github.com/kjd/idna"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"packaging","old_version":"26.0","new_version":"26.3","repository_url":"https://github.com/pypa/packaging"},{"name":"pip","old_version":"26.0.1","new_version":"26.2.1","repository_url":"https://github.com/pypa/pip"},{"name":"pip-tools","old_version":"7.5.3","new_version":"7.6.1","repository_url":"https://github.com/jazzband/pip-tools"},{"name":"platformdirs","old_version":"4.9.4","new_version":"4.11.3","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"pre-commit","old_version":"4.5.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pygments","old_version":"2.20.0","new_version":"2.21.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-codspeed","old_version":"4.3.0","new_version":"5.0.3","repository_url":"https://github.com/CodSpeedHQ/pytest-codspeed"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"python-discovery","old_version":"1.2.1","new_version":"1.5.2","repository_url":"https://github.com/tox-dev/python-discovery"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"rich","old_version":"14.3.3","new_version":"15.0.0","repository_url":"https://github.com/Textualize/rich"},{"name":"setuptools","old_version":"82.0.1","new_version":"84.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"sqlparse","old_version":"0.5.5","new_version":"0.6.0","repository_url":"https://github.com/andialbrecht/sqlparse"},{"name":"ty","old_version":"0.0.1a21","new_version":"0.0.73","repository_url":"https://github.com/astral-sh/ty"},{"name":"types-psycopg2","old_version":"2.9.21.20260223","new_version":"2.9.21.20260724","repository_url":"https://github.com/python/typeshed"},{"name":"types-pyyaml","old_version":"6.0.12.20250915","new_version":"6.0.12.20260815","repository_url":"https://github.com/python/typeshed"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"virtualenv","old_version":"21.2.0","new_version":"21.7.4","repository_url":"https://github.com/pypa/virtualenv"},{"name":"wheel","old_version":"0.46.3","new_version":"0.48.0","repository_url":"https://github.com/pypa/wheel"},{"name":"bleach","old_version":"4.1.0","new_version":"6.4.0","repository_url":"https://github.com/mozilla/bleach"},{"name":"blessed","old_version":"1.38.0","new_version":"1.48.0","repository_url":"https://github.com/jquast/blessed"},{"name":"boto3","old_version":"1.42.82","new_version":"1.43.78","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.42.82","new_version":"1.43.78","repository_url":"https://github.com/boto/botocore"},{"name":"django-allauth","old_version":"65.14.3","new_version":"65.19.1","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-anymail","old_version":"14.0","new_version":"15.1","repository_url":"https://github.com/anymail/django-anymail"},{"name":"django-dbbackup","old_version":"5.2.0","new_version":"5.3.0","repository_url":"https://github.com/Archmonger/django-dbbackup"},{"name":"django-filter","old_version":"25.2","new_version":"26.1","repository_url":"https://github.com/carltongibson/django-filter"},{"name":"django-js-asset","old_version":"3.1.2","new_version":"4.0.2","repository_url":"https://github.com/feincms/django-js-asset"},{"name":"django-maintenance-mode","old_version":"0.22.0","new_version":"0.23.0","repository_url":"https://github.com/fabiocaccamo/django-maintenance-mode"},{"name":"django-markdownify","old_version":"0.9.1","new_version":"0.9.7","repository_url":"https://github.com/erwinmatijsen/django-markdownify"},{"name":"django-money","old_version":"3.6.0","new_version":"3.6.1","repository_url":"https://github.com/django-money/django-money"},{"name":"django-oauth-toolkit","old_version":"3.2.0","new_version":"3.4.1","repository_url":"https://github.com/django-oauth/django-oauth-toolkit"},{"name":"django-otp","old_version":"1.3.0","new_version":"1.7.0","repository_url":"https://github.com/django-otp/django-otp"},{"name":"django-q2","old_version":"1.9.0","new_version":"1.11.0","repository_url":"https://github.com/GDay/django-q2"},{"name":"django-redis","old_version":"6.0.0","new_version":"7.0.0","repository_url":"https://github.com/jazzband/django-redis"},{"name":"django-structlog","old_version":"10.0.0","new_version":"10.1.0","repository_url":"https://github.com/jrobichaud/django-structlog"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"docutils","old_version":"0.22.4","new_version":"0.23","repository_url":"https://github.com/rtfd/recommonmark"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"dulwich","old_version":"1.1.0","new_version":"1.2.12","repository_url":"https://github.com/dulwich/dulwich"},{"name":"feedparser","old_version":"6.0.12","new_version":"6.0.14","repository_url":"https://github.com/kurtmckee/feedparser"},{"name":"fido2","old_version":"2.1.1","new_version":"2.2.1","repository_url":"https://github.com/Yubico/python-fido2"},{"name":"fonttools","old_version":"4.62.1","new_version":"4.63.0","repository_url":"https://github.com/fonttools/fonttools"},{"name":"googleapis-common-protos","old_version":"1.74.0","new_version":"1.75.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.80.0","new_version":"1.83.0","repository_url":"https://github.com/grpc/grpc"},{"name":"gunicorn","old_version":"25.3.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"icalendar","old_version":"7.0.3","new_version":"7.3.0","repository_url":"https://github.com/collective/icalendar"},{"name":"importlib-metadata","old_version":"8.7.1","new_version":"9.0.0","repository_url":"https://github.com/python/importlib_metadata"},{"name":"invoke","old_version":"2.2.1","new_version":"3.0.3","repository_url":"https://github.com/pyinvoke/invoke"},{"name":"jwcrypto","old_version":"1.5.7","new_version":"1.5.8","repository_url":"https://github.com/latchset/jwcrypto"},{"name":"lxml","old_version":"6.0.2","new_version":"6.1.2","repository_url":"https://github.com/lxml/lxml"},{"name":"markdown","old_version":"3.10.2","new_version":"3.10.3","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"nh3","old_version":"0.3.4","new_version":"0.3.6","repository_url":"https://github.com/messense/nh3"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.40.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.40.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.40.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.61b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-dbapi","old_version":"0.61b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.40.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.61b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.61b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"paramiko","old_version":"4.0.0","new_version":"5.0.0","repository_url":"https://github.com/paramiko/paramiko"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"prettytable","old_version":"3.17.0","new_version":"3.18.0","repository_url":"https://github.com/prettytable/prettytable"},{"name":"protobuf","old_version":"6.33.6","new_version":"7.36.0","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"pypdf","old_version":"6.10.0","new_version":"6.16.1","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"pyphen","old_version":"0.17.2","new_version":"0.18.1","repository_url":"https://github.com/Kozea/Pyphen"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-fsutil","old_version":"0.16.0","new_version":"0.17.0","repository_url":"https://github.com/fabiocaccamo/python-fsutil"},{"name":"rapidfuzz","old_version":"3.14.3","new_version":"3.14.5","repository_url":"https://github.com/rapidfuzz/RapidFuzz"},{"name":"redis","old_version":"7.4.0","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"rpds-py","old_version":"0.30.0","new_version":"2026.6.3","repository_url":"https://github.com/crate-py/rpds"},{"name":"s3transfer","old_version":"0.16.0","new_version":"0.19.2","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.57.0","new_version":"2.68.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"structlog","old_version":"25.5.0","new_version":"26.1.0","repository_url":"https://github.com/hynek/structlog"},{"name":"tablib","old_version":"3.9.0","new_version":"3.10.0","repository_url":"https://github.com/jazzband/tablib"},{"name":"tzdata","old_version":"2026.1","new_version":"2026.3","repository_url":"https://github.com/python/tzdata"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"weasyprint","old_version":"68.1","new_version":"69.0","repository_url":"https://github.com/Kozea/WeasyPrint"},{"name":"webencodings","old_version":"0.5.1","new_version":"0.6.1","repository_url":"https://github.com/CourtBouillon/webencodings"},{"name":"wrapt","old_version":"1.17.3","new_version":"2.3.0","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"zipp","old_version":"3.23.0","new_version":"4.1.0","repository_url":"https://github.com/jaraco/zipp"},{"name":"zopfli","old_version":"0.4.1","new_version":"0.4.3","repository_url":"https://github.com/fonttools/py-zopfli"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dependencies group with 4 updates in the /docs directory: [mkdocs-git-revision-date-localized-plugin](https://github.com/timvink/mkdocs-git-revision-date-localized-plugin), [mkdocs-include-markdown-plugin](https://github.com/mondeja/mkdocs-include-markdown-plugin), [mkdocs-material](https://github.com/squidfunk/mkdocs-material) and [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings).\nBumps the dependencies group with 104 updates in the /src/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [build](https://github.com/pypa/build) | `1.4.2` | `1.5.0` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.7.22` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.1` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.5.1` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.4.2` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.5` | `7.15.4` |\n| [distlib](https://github.com/pypa/distlib) | `0.4.0` | `0.4.3` |\n| [django](https://github.com/django/django) | `5.2.13` | `6.1` |\n| [django-silk](https://github.com/jazzband/django-silk) | `5.5.0` | `5.5.2` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.2` | `6.1.0` |\n| [django-stubs-ext](https://github.com/typeddjango/django-stubs) | `6.0.2` | `6.1.0` |\n| [django-test-migrations](https://github.com/wemake-services/django-test-migrations) | `1.5.0` | `1.6.0` |\n| [django-types](https://github.com/sbdchd/django-types) | `0.23.0` | `0.24.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.25.2` | `3.32.3` |\n| [identify](https://github.com/pre-commit/identify) | `2.6.18` | `2.6.19` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.19` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.3` |\n| [pip](https://github.com/pypa/pip) | `26.0.1` | `26.2.1` |\n| [pip-tools](https://github.com/jazzband/pip-tools) | `7.5.3` | `7.6.1` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.4` | `4.11.3` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.5.1` | `4.6.2` |\n| [pygments](https://github.com/pygments/pygments) | `2.20.0` | `2.21.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [pytest-codspeed](https://github.com/CodSpeedHQ/pytest-codspeed) | `4.3.0` | `5.0.3` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [python-discovery](https://github.com/tox-dev/python-discovery) | `1.2.1` | `1.5.2` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [rich](https://github.com/Textualize/rich) | `14.3.3` | `15.0.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `84.0.0` |\n| [sqlparse](https://github.com/andialbrecht/sqlparse) | `0.5.5` | `0.6.0` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.1a21` | `0.0.73` |\n| [types-psycopg2](https://github.com/python/typeshed) | `2.9.21.20260223` | `2.9.21.20260724` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20250915` | `6.0.12.20260815` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.2.0` | `21.7.4` |\n| [wheel](https://github.com/pypa/wheel) | `0.46.3` | `0.48.0` |\n| [bleach](https://github.com/mozilla/bleach) | `4.1.0` | `6.4.0` |\n| [blessed](https://github.com/jquast/blessed) | `1.38.0` | `1.48.0` |\n| [boto3](https://github.com/boto/boto3) | `1.42.82` | `1.43.78` |\n| [botocore](https://github.com/boto/botocore) | `1.42.82` | `1.43.78` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.14.3` | `65.19.1` |\n| [django-anymail](https://github.com/anymail/django-anymail) | `14.0` | `15.1` |\n| [django-dbbackup](https://github.com/Archmonger/django-dbbackup) | `5.2.0` | `5.3.0` |\n| [django-filter](https://github.com/carltongibson/django-filter) | `25.2` | `26.1` |\n| [django-js-asset](https://github.com/feincms/django-js-asset) | `3.1.2` | `4.0.2` |\n| [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) | `0.22.0` | `0.23.0` |\n| [django-markdownify](https://github.com/erwinmatijsen/django-markdownify) | `0.9.1` | `0.9.7` |\n| [django-money](https://github.com/django-money/django-money) | `3.6.0` | `3.6.1` |\n| [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) | `3.2.0` | `3.4.1` |\n| [django-otp](https://github.com/django-otp/django-otp) | `1.3.0` | `1.7.0` |\n| [django-q2](https://github.com/GDay/django-q2) | `1.9.0` | `1.11.0` |\n| [django-redis](https://github.com/jazzband/django-redis) | `6.0.0` | `7.0.0` |\n| [django-structlog](https://github.com/jrobichaud/django-structlog) | `10.0.0` | `10.1.0` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [docutils](https://github.com/rtfd/recommonmark) | `0.22.4` | `0.23` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `1.1.0` | `1.2.12` |\n| [feedparser](https://github.com/kurtmckee/feedparser) | `6.0.12` | `6.0.14` |\n| [fido2](https://github.com/Yubico/python-fido2) | `2.1.1` | `2.2.1` |\n| [fonttools](https://github.com/fonttools/fonttools) | `4.62.1` | `4.63.0` |\n| [googleapis-common-protos](https://github.com/googleapis/google-cloud-python) | `1.74.0` | `1.75.1` |\n| [grpcio](https://github.com/grpc/grpc) | `1.80.0` | `1.83.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `25.3.0` | `26.1.0` |\n| [icalendar](https://github.com/collective/icalendar) | `7.0.3` | `7.3.0` |\n| [importlib-metadata](https://github.com/python/importlib_metadata) | `8.7.1` | `9.0.0` |\n| [invoke](https://github.com/pyinvoke/invoke) | `2.2.1` | `3.0.3` |\n| [jwcrypto](https://github.com/latchset/jwcrypto) | `1.5.7` | `1.5.8` |\n| [lxml](https://github.com/lxml/lxml) | `6.0.2` | `6.1.2` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.10.2` | `3.10.3` |\n| [nh3](https://github.com/messense/nh3) | `0.3.4` | `0.3.6` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.44.0` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.65b0` |\n| [opentelemetry-instrumentation-dbapi](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.65b0` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.40.0` | `1.44.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.61b0` | `0.65b0` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.61b0` | `0.65b0` |\n| [paramiko](https://github.com/paramiko/paramiko) | `4.0.0` | `5.0.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [prettytable](https://github.com/prettytable/prettytable) | `3.17.0` | `3.18.0` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.6` | `7.36.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.10.0` | `6.16.1` |\n| [pyphen](https://github.com/Kozea/Pyphen) | `0.17.2` | `0.18.1` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [python-fsutil](https://github.com/fabiocaccamo/python-fsutil) | `0.16.0` | `0.17.0` |\n| [rapidfuzz](https://github.com/rapidfuzz/RapidFuzz) | `3.14.3` | `3.14.5` |\n| [redis](https://github.com/redis/redis-py) | `7.4.0` | `8.1.0` |\n| [rpds-py](https://github.com/crate-py/rpds) | `0.30.0` | `2026.6.3` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.16.0` | `0.19.2` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.57.0` | `2.68.0` |\n| [structlog](https://github.com/hynek/structlog) | `25.5.0` | `26.1.0` |\n| [tablib](https://github.com/jazzband/tablib) | `3.9.0` | `3.10.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.1` | `2026.3` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.8.2` |\n| [weasyprint](https://github.com/Kozea/WeasyPrint) | `68.1` | `69.0` |\n| [webencodings](https://github.com/CourtBouillon/webencodings) | `0.5.1` | `0.6.1` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `1.17.3` | `2.3.0` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.0` | `4.1.0` |\n| [zopfli](https://github.com/fonttools/py-zopfli) | `0.4.1` | `0.4.3` |\n\n\nUpdates `mkdocs-git-revision-date-localized-plugin` from 1.5.1 to 1.5.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/releases\"\u003emkdocs-git-revision-date-localized-plugin's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.4\u003c/h2\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eRaises the \u003ccode\u003egitpython\u003c/code\u003e floor from \u003ccode\u003e\u0026gt;=3.1.44\u003c/code\u003e to \u003ccode\u003e\u0026gt;=3.1.59\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eEarlier dependabot bumps only touched this repo's \u003ccode\u003euv.lock\u003c/code\u003e, which pins the CI\nenvironment and nothing else. Downstream users installing from PyPI resolved\nagainst \u003ccode\u003epyproject.toml\u003c/code\u003e, so they could still land on a GitPython carrying the\n2026 option-injection advisories — GHSA-wvpp-8hx9-p66j and GHSA-jm78-9fvv-mhgr\namong them, all patched by 3.1.58, with further option hardening in 3.1.59.\u003c/p\u003e\n\u003cp\u003eThis plugin never passes user input as git options, so it was not exploitable\nthrough those. The floor bump forces the upgrade in environments that already\nhold an older GitPython, and clears the warnings downstream scanners report.\u003c/p\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/nucleus-ffm\"\u003e\u003ccode\u003e@​nucleus-ffm\u003c/code\u003e\u003c/a\u003e for reporting it in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/222\"\u003e#222\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eMaintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHarden test git repos against flaky \u0026quot;Error building trees\u0026quot; failures by \u003ca href=\"https://github.com/timvink\"\u003e\u003ccode\u003e@​timvink\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/212\"\u003e#212\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: update GitHub Actions to Node 24 compatible versions by \u003ca href=\"https://github.com/timvink\"\u003e\u003ccode\u003e@​timvink\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/213\"\u003e#213\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edeps: bump idna and pymdown-extensions to patch security alerts by \u003ca href=\"https://github.com/timvink\"\u003e\u003ccode\u003e@​timvink\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/214\"\u003e#214\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump gitpython from 3.1.50 to 3.1.58 in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/217\"\u003e#217\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/219\"\u003e#219\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/220\"\u003e#220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pymdown-extensions from 10.21.3 to 11.0.1 in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/218\"\u003e#218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/221\"\u003e#221\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.3...v1.5.4\"\u003ehttps://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.3...v1.5.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.5.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix paths in MANIFEST.in by \u003ca href=\"https://github.com/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/211\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#211\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/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/211\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#211\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\"\u003ehttps://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.5.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eGuard against \u003ccode\u003epage is None\u003c/code\u003e in mkdocs theme override Jinja2 templates by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/202\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#202\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependency updates (security)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump requests from 2.32.5 to 2.33.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/203\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#203\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pytest from 8.4.2 to 9.0.3 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/204\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump gitpython from 3.1.45 to 3.1.50 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/205\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#205\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/207\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#207\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/208\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pygments from 2.19.2 to 2.20.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/206\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#206\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump urllib3 from 2.6.3 to 2.7.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/209\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#209\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.1...v1.5.2\"\u003ehttps://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.1...v1.5.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/a2313a306eaf9b92f0f0a27bfbd2eb44a9f847e2\"\u003e\u003ccode\u003ea2313a3\u003c/code\u003e\u003c/a\u003e Bump version to 1.5.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/b1be777c7ae9d1a5055a5dc452a48883dcbc2a64\"\u003e\u003ccode\u003eb1be777\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions from 11.0 to 11.0.1 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/221\"\u003e#221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/fd6e3b09e0b956fb93de0661ac9f8d3fa1aa1e8b\"\u003e\u003ccode\u003efd6e3b0\u003c/code\u003e\u003c/a\u003e Bump gitpython from 3.1.57 to 3.1.58 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/220\"\u003e#220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/0c308d5d3b6a7eb26aaa56b9d9a969622a4d7108\"\u003e\u003ccode\u003e0c308d5\u003c/code\u003e\u003c/a\u003e Bump gitpython from 3.1.54 to 3.1.57 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/219\"\u003e#219\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/75279a9252eed9f1558c56205c769b6f3cac3564\"\u003e\u003ccode\u003e75279a9\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions from 10.21.3 to 11.0 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/218\"\u003e#218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/7756feed9b64716d4d8fe5e2472abe3d99b1cc27\"\u003e\u003ccode\u003e7756fee\u003c/code\u003e\u003c/a\u003e Bump gitpython from 3.1.50 to 3.1.54 (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/217\"\u003e#217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/0c2e203a79b63e5e1980eb209459cddf5fa8ec4e\"\u003e\u003ccode\u003e0c2e203\u003c/code\u003e\u003c/a\u003e deps: bump idna and pymdown-extensions to patch security alerts (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/214\"\u003e#214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/aa44586a9077b7aad533ddfd9872c105ffd9a1a7\"\u003e\u003ccode\u003eaa44586\u003c/code\u003e\u003c/a\u003e ci: update GitHub Actions to Node 24 compatible versions (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/213\"\u003e#213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/58eb93017772c7eb73b3f5bc239f1d2f7380e3d2\"\u003e\u003ccode\u003e58eb930\u003c/code\u003e\u003c/a\u003e Harden test git repos against flaky 'Error building trees' failures (\u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/212\"\u003e#212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/30e58767a16cd9ec1dd2669f0bdc1af8630af18c\"\u003e\u003ccode\u003e30e5876\u003c/code\u003e\u003c/a\u003e Bump version to 1.5.3\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.1...v1.5.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-include-markdown-plugin` from 7.2.2 to 7.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mondeja/mkdocs-include-markdown-plugin/releases\"\u003emkdocs-include-markdown-plugin's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev7.3.0\u003c/h2\u003e\n\u003ch3\u003eNew features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd new setting \u003ccode\u003einclude_from_url\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/mondeja/mkdocs-include-markdown-plugin/commit/0604be2390c35b9da7d1a69be2f8925693460efd\"\u003e\u003ccode\u003e0604be2\u003c/code\u003e\u003c/a\u003e Add new setting \u003ccode\u003einclude_from_url\u003c/code\u003e(\u003ca href=\"https://redirect.github.com/mondeja/mkdocs-include-markdown-plugin/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mondeja/mkdocs-include-markdown-plugin/commit/f0809f9ac84db5dd29a5bc98e9029d69164237b8\"\u003e\u003ccode\u003ef0809f9\u003c/code\u003e\u003c/a\u003e Document order setting (\u003ca href=\"https://redirect.github.com/mondeja/mkdocs-include-markdown-plugin/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mondeja/mkdocs-include-markdown-plugin/compare/v7.2.2...v7.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-material` from 9.7.6 to 9.7.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/squidfunk/mkdocs-material/releases\"\u003emkdocs-material's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003emkdocs-material-9.7.7\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial for MkDocs is approaching end of life\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eMaterial for MkDocs is scheduled to reach end of life on November 5, 2026. Until then, maintenance is limited to critical bug fixes and security updates. After this date, the project will remain available on PyPI and GitHub, but no further maintenance is planned except in exceptional circumstances.\u003c/p\u003e\n\u003cp\u003eFor users looking for a long-term, actively developed successor, we're building \u003ca href=\"https://zensical.org\"\u003eZensical\u003c/a\u003e – a next-generation static site generator designed for technical documentation. If you're planning a new documentation project or evaluating your long-term options, we invite you to take a look.\u003c/p\u003e\n\u003cp\u003eOrganizations requiring support beyond this date are welcome to get in touch to discuss available options.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\"\u003eRead the full announcement on our blog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a DOM-based XSS vulnerability in search suggestions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/p\"\u003e\u003ccode\u003e@​p\u003c/code\u003e\u003c/a\u003e- for responsibly reporting this issue.\u003c/p\u003e\n\u003c/blockquote\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/squidfunk/mkdocs-material/blob/master/CHANGELOG\"\u003emkdocs-material's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003emkdocs-material-9.7.7 (2026-07-17)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed DOM-based XSS vulnerability in search suggestions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.6 (2026-03-19)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAutomatically disable MkDocs 2.0 warning for forks of MkDocs\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.5 (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eLimited version range of mkdocs to \u0026lt;2\u003c/li\u003e\n\u003cli\u003eUpdated MkDocs 2.0 incompatibility warning (clarify relation with MkDocs)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.4 (2026-03-03)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHardened social cards plugin by switching to sandboxed environment\u003c/li\u003e\n\u003cli\u003eUpdated MkDocs 2.0 incompatibility warning\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.3 (2026-02-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8567\"\u003e#8567\u003c/a\u003e: Print MkDocs 2.0 incompatibility warning to stderr\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.2 (2026-02-18)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eOpened up version ranges of optional dependencies for forward-compatibility\u003c/li\u003e\n\u003cli\u003eAdded warning to 'mkdocs build' about impending MkDocs 2.0 incompatibility\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.1 (2025-12-18)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated requests to 2.30+ to mitigate CVE in urllib\u003c/li\u003e\n\u003cli\u003eFixed privacy plugin not picking up protocol-relative URLs\u003c/li\u003e\n\u003cli\u003eFixed \u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8542\"\u003e#8542\u003c/a\u003e: false positives and negatives captured in privacy plugin\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.0 (2025-11-11)\u003c/p\u003e\n\u003cp\u003e⚠️ Material for MkDocs is now in maintenance mode\u003c/p\u003e\n\u003cp\u003eThis is the last release of Material for MkDocs that will receive new features.\nGoing forward, the Material for MkDocs team focuses on Zensical, a next-gen\nstatic site generator built from first principles. We will provide critical\nbug fixes and security updates for Material for MkDocs for 12 months at least.\u003c/p\u003e\n\u003cp\u003eRead the full announcement on our blog:\n\u003ca href=\"https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\"\u003ehttps://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis release includes all features that were previously exclusive to the\nInsiders edition. These features are now freely available to everyone.\u003c/p\u003e\n\u003cp\u003eNote on deprecated plugins: The projects and typeset plugins are included in\nthis release, but must be considered deprecated. Both plugins proved\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/squidfunk/mkdocs-material/commit/b3e6dd886a974aa8200759ecfd7db28c598a2894\"\u003e\u003ccode\u003eb3e6dd8\u003c/code\u003e\u003c/a\u003e Prepare 9.7.7 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/52fb6be8aafe326419f34dc94d3211e7bbfbfb25\"\u003e\u003ccode\u003e52fb6be\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/901e6335cc80b0f12e46a1e34bd85e983dd78a6e\"\u003e\u003ccode\u003e901e633\u003c/code\u003e\u003c/a\u003e Added \u003ccode\u003eSECURITY.md\u003c/code\u003e with EOL notice\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/5b36f2ac499a45905e246bc66bbee2858ef6556f\"\u003e\u003ccode\u003e5b36f2a\u003c/code\u003e\u003c/a\u003e Bump js-yaml from 4.1.1 to 4.2.0 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8598\"\u003e#8598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/2d11e7bc92c59b86d6ac0da2e38044fb4befa6e0\"\u003e\u003ccode\u003e2d11e7b\u003c/code\u003e\u003c/a\u003e Bump form-data from 3.0.4 to 3.0.5 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8597\"\u003e#8597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/ae05a534a8c8e1c58eb6aa55d460d309bcfce22b\"\u003e\u003ccode\u003eae05a53\u003c/code\u003e\u003c/a\u003e Bump esbuild from 0.27.2 to 0.28.1 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8596\"\u003e#8596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/434af93166e5b90b78bba1295ca5a140fc67d0bc\"\u003e\u003ccode\u003e434af93\u003c/code\u003e\u003c/a\u003e Bump shell-quote from 1.7.3 to 1.8.4 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8593\"\u003e#8593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/4447cdadcbe8bc82570e9f1ae2b970f461b03b68\"\u003e\u003ccode\u003e4447cda\u003c/code\u003e\u003c/a\u003e Documentation (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8590\"\u003e#8590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/8f8d551c9c5296dfc2a5ede35047bfb491d66bc9\"\u003e\u003ccode\u003e8f8d551\u003c/code\u003e\u003c/a\u003e Updated copyright year (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8588\"\u003e#8588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/08d8514d491782b4ac46673bcfdedb2f6fc85f3d\"\u003e\u003ccode\u003e08d8514\u003c/code\u003e\u003c/a\u003e Bump fast-uri from 3.0.3 to 3.1.2 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8587\"\u003e#8587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/squidfunk/mkdocs-material/compare/9.7.6...9.7.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.3 to 1.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.4\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.4\"\u003e1.0.4\u003c/a\u003e - 2026-04-15\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003eCompare with 1.0.3\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd timeout when downloading inventories (10 seconds) (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e3d1969a\u003c/a\u003e by Simon Lloyd). \u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/819\"\u003eIssue-819\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/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.4\"\u003e1.0.4\u003c/a\u003e - 2026-04-15\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.4\"\u003eCompare with 1.0.3\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd timeout when downloading inventories (10 seconds) (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/3d1969a279ea396792c682810d029503e48d8fcd\"\u003e3d1969a\u003c/a\u003e by Simon Lloyd). \u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/819\"\u003eIssue-819\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/mkdocstrings/mkdocstrings/commit/9a11dcb8e9b39ff6e1a22abdd362350de4e68e9f\"\u003e\u003ccode\u003e9a11dcb\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e\u003ccode\u003e4732798\u003c/code\u003e\u003c/a\u003e fix: Stop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ecbaa9a05dde5bdc83accf8814fa1c9a1ffe1473\"\u003e\u003ccode\u003eecbaa9a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/64260f748f3db8b301a9d6fa05b2609ab6f6876c\"\u003e\u003ccode\u003e64260f7\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003e\u003ccode\u003eacc0da3\u003c/code\u003e\u003c/a\u003e fix: Parse inventory project and version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ec45a9b7a1301a4c70e02e6c92e1b9caff6df61f\"\u003e\u003ccode\u003eec45a9b\u003c/code\u003e\u003c/a\u003e ci: Fix warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ce2199c5195535f8c3b4907dd3ac7de2181925cc\"\u003e\u003ccode\u003ece2199c\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README (\u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/823\"\u003e#823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/a938528b51b42cde52465d06d8b1a52484837366\"\u003e\u003ccode\u003ea938528\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/1eaa2242ec33e4b6ce666f0bbc25391f2a72c1d2\"\u003e\u003ccode\u003e1eaa224\u003c/code\u003e\u003c/a\u003e ci: Lint and type-check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/80e090d0bfbfa5688639e78559a4bb7bd3f7a55b\"\u003e\u003ccode\u003e80e090d\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.3...1.0.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asgiref` from 3.11.1 to 3.12.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/asgiref/blob/main/CHANGELOG.txt\"\u003easgiref's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.1 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRestored the previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape, which was\nrelied on by some APM services. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/572\"\u003e#572\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNote, this change was available whilst maintaining the underlying fix (from\n\u003ca href=\"https://redirect.github.com/django/asgiref/issues/564\"\u003e#564\u003c/a\u003e). It does not constitute an API stability promise. Ideally APMs are\n\u003cem\u003enot\u003c/em\u003e monkey patching internal APIs, and future changes will be made here if\nneeded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12.0 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAsyncToSync\u003c/code\u003e no longer captures the running event loop on\ninstantiation. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis resolves a series of deadlocks that users experienced after asgiref 3.9.0,\nparticularly with pytest-asyncio. pytest-asyncio stops the event loop between\ntests, and long-running unawaited futures could find themselves trying to\nschedule work onto a stopped loop, and so would never complete. Ideally, code\nshould be structured to await long-running futures before returning, but this\nchange should help users experiencing issues here.\u003c/p\u003e\n\u003cp\u003eThe loop is now resolved when the callable is invoked rather than when it is\ncreated. If \u003ccode\u003easync_to_sync\u003c/code\u003e is called from within \u003ccode\u003esync_to_async\u003c/code\u003e, the\nparent event loop is still used, as before.\u003c/p\u003e\n\u003cp\u003eThe possibility of deadlock therefore remains in some nested patterns. For\nexample, an async function may call a long-running \u003ccode\u003esync_to_async\u003c/code\u003e function\nthat itself uses \u003ccode\u003easync_to_sync\u003c/code\u003e; if the outer function returns before the\nsync future completes, the parent event loop may already be stopped, and the\nnested calls cannot be driven to completion.\u003c/p\u003e\n\u003cp\u003eThis is not a bug in asgiref — the same patterns deadlock in plain asyncio. As\nabove, restructure your code to await the \u003ccode\u003esync_to_async\u003c/code\u003e future before\nexiting the driving coroutine.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an event loop deadlock when exiting \u003ccode\u003eThreadSensitiveContext\u003c/code\u003e\nwhile its executor thread was still blocked waiting on the event loop.\n(\u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for EOL Python 3.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eStatelessServer.run()\u003c/code\u003e failing on Python 3.14, where\n\u003ccode\u003easyncio.get_event_loop()\u003c/code\u003e no longer creates an event loop if none\nexists. It now uses \u003ccode\u003easyncio.run()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/559\"\u003e#559\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eLocal\u003c/code\u003e leaking data between unrelated sync threads when\n\u003ccode\u003esys.flags.thread_inherit_context\u003c/code\u003e is enabled (Python 3.14+), so a newly\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/ef9d4b8b371cf8a7bb63dea3d0fdc60923e9e081\"\u003e\u003ccode\u003eef9d4b8\u003c/code\u003e\u003c/a\u003e Releasing 3.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/34fba6328f67a753d814c280811fd34094bd1f6c\"\u003e\u003ccode\u003e34fba63\u003c/code\u003e\u003c/a\u003e Restore previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a43900c131874be571c6afdca642d4054eed0acf\"\u003e\u003ccode\u003ea43900c\u003c/code\u003e\u003c/a\u003e Separate mypy from tests extra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/1b7c338591054c04ff6c140d899ced28b803b4e0\"\u003e\u003ccode\u003e1b7c338\u003c/code\u003e\u003c/a\u003e Releasing 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/157d9d4168434d73b1bb5a619f947b74ccbf1fc8\"\u003e\u003ccode\u003e157d9d4\u003c/code\u003e\u003c/a\u003e Renovate precommit (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/deda0d4fd8d3997dddd9646dd9ef7e0b6d3e59a5\"\u003e\u003ccode\u003ededa0d4\u003c/code\u003e\u003c/a\u003e Test free-threading builds and fix Local data leak for thread_inherit_context...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a54250a24ad770616d3afcc37af3186558562041\"\u003e\u003ccode\u003ea54250a\u003c/code\u003e\u003c/a\u003e Don’t capture the event loop in \u003ccode\u003eAsyncToSync.__init__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/836356a2802247a0963177197b50cbd7476d7950\"\u003e\u003ccode\u003e836356a\u003c/code\u003e\u003c/a\u003e Use asyncio.run in StatelessServer.run (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/e04afd54ba29bb277ba6177dc898c73c129446f3\"\u003e\u003ccode\u003ee04afd5\u003c/code\u003e\u003c/a\u003e Dropped support for Python 3.9. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/543\"\u003e#543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/95d2430a346be7f40652d2eabff84fe54fbc725d\"\u003e\u003ccode\u003e95d2430\u003c/code\u003e\u003c/a\u003e Fixed \u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e: ThreadSensitiveContext.\u003cstrong\u003eaexit\u003c/strong\u003e blocking the event loop. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/563\"\u003e#563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/asgiref/compare/3.11.1...3.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `build` from 1.4.2 to 1.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/releases\"\u003ebuild's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.5.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eci: try to improve release docs by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1051\"\u003epypa/build#1051\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: drop 3.9, require 3.10+ by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1036\"\u003epypa/build#1036\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: tox toml by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1033\"\u003epypa/build#1033\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: api should not ignore installed, only CLI by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1056\"\u003epypa/build#1056\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/build/compare/1.4.4...1.5.0\"\u003ehttps://github.com/pypa/build/compare/1.4.4...1.5.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.4.4\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(release): generate consistent CHANGELOG heading levels by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1032\"\u003epypa/build#1032\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: move source links by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1034\"\u003epypa/build#1034\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erevert: drop PEP 660 change by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1039\"\u003epypa/build#1039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: ignore installed when running pip by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1040\"\u003epypa/build#1040\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: revert part of \u003ca href=\"https://redirect.github.com/pypa/build/issues/973\"\u003e#973\u003c/a\u003e by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1044\"\u003epypa/build#1044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: report coverage failure lines by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1046\"\u003epypa/build#1046\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: fix issue with uv run by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1048\"\u003epypa/build#1048\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: reorganize testing docs for copy/paste by \u003ca href=\"https://github.com/abitrolly\"\u003e\u003ccode\u003e@​abitrolly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1043\"\u003epypa/build#1043\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: keep environment from leaking in Python 3.15 by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1049\"\u003epypa/build#1049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix issue with changelog generation by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1050\"\u003epypa/build#1050\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/build/compare/1.4.3...1.4.4\"\u003ehttps://github.com/pypa/build/compare/1.4.3...1.4.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.4.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(api): resolve thread-safety races in build API by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1015\"\u003epypa/build#1015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(builder): validate backend-path entries exist on disk by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1016\"\u003epypa/build#1016\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: cover config settings build paths by \u003ca href=\"https://github.com/terminalchai\"\u003e\u003ccode\u003e@​terminalchai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/992\"\u003epypa/build#992\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd kind=(step, ) for root messages with * by \u003ca href=\"https://github.com/abitrolly\"\u003e\u003ccode\u003e@​abitrolly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/973\"\u003epypa/build#973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: correct changelog category ordering by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1017\"\u003epypa/build#1017\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(cli): show full dependency chain in missing deps error by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1019\"\u003epypa/build#1019\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: fully annotate by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1020\"\u003epypa/build#1020\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: lazy imports by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1021\"\u003epypa/build#1021\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: adding more ruff codes by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1022\"\u003epypa/build#1022\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: improve annotations by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1023\"\u003epypa/build#1023\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test(coverage): achieve 100% test coverage by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1018\"\u003epypa/build#1018\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add ruff PT by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1025\"\u003epypa/build#1025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add ruff PYI by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1026\"\u003epypa/build#1026\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add ruff SIM/RET by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1028\"\u003epypa/build#1028\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(env): strip PYTHONPATH from isolated builds by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1024\"\u003epypa/build#1024\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: use ruff ALL by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1029\"\u003epypa/build#1029\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/blob/main/CHANGELOG.rst\"\u003ebuild's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e####################\n1.6.0 (2026-08-27)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--report=PATH\u003c/code\u003e to write a machine-readable JSON report of built artifacts; \u003ccode\u003e--metadata\u003c/code\u003e now also accepts\n\u003ccode\u003e.whl\u003c/code\u003e files - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e198\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003esrcdir\u003c/code\u003e argument now accepts \u003ccode\u003e.tar.gz\u003c/code\u003e source distributions, extracting and building from them - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e311\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Unmet dependencies\u0026quot; error from \u003ccode\u003e--no-isolation\u003c/code\u003e builds now shows the wanted version, found version, and\ninterpreter - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e504\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e to extract the intermediate sdist into a persistent directory, enabling compiler cache\nreuse across rebuilds - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e614\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--env-dir\u003c/code\u003e to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds\n\u003cul\u003e\n\u003cli\u003eby :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e655\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePrint a summary of resolved dependency versions (\u003ccode\u003ename==version\u003c/code\u003e) after installing them in isolated builds - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e959\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOn build failure, print a tip pointing to \u003ccode\u003e--env-dir\u003c/code\u003e and \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e for debugging and link to the\n\u0026quot;Debug a failed build\u0026quot; how-to - reported by :user:\u003ccode\u003edimpase\u003c/code\u003e, implemented by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e966\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDrain verbose subprocess output inline instead of using a \u003ccode\u003eThreadPoolExecutor\u003c/code\u003e, which silently swallowed logging\nerrors - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1098\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eReject a file passed as \u003ccode\u003e--env-dir\u003c/code\u003e with a clear error instead of a raw \u003ccode\u003eFileExistsError\u003c/code\u003e - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e\n(:issue:\u003ccode\u003e1100\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eEmit CLI warnings to stderr instead of stdout, so they no longer corrupt \u003ccode\u003e--metadata\u003c/code\u003e JSON output on stdout - by\n:user:\u003ccode\u003eymyzk\u003c/code\u003e (:issue:\u003ccode\u003e1111\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix the Windows symlink support probe always returning \u003ccode\u003eFalse\u003c/code\u003e due to a stale object interpolated into the\ndestination path - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1118\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003emetadata_path\u003c/code\u003e's build-backend fallback returning a nonexistent dist-info path for wheels with a build tag - by\n:user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWrite pip/uv requirements and constraints files with \u003ccode\u003e\\n\u003c/code\u003e instead of \u003ccode\u003eos.linesep\u003c/code\u003e, avoiding doubled \u003ccode\u003e\\r\\r\\n\u003c/code\u003e\nline endings on Windows - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1120\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eBatch of small robustness fixes: correct macOS release parsing for the minimum pip version, avoid sharing the mutable\ndefault build-system table between builders, keep the original error when isolated-environment setup fails early, and\nraise \u003ccode\u003eBuildException\u003c/code\u003e for an invalid wheel - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1121\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDecide color support independently for stdout and stderr instead of only checking \u003ccode\u003estdout.isatty()\u003c/code\u003e, so redirecting\none stream no longer disables or leaks ANSI colors on the other - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1123\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePass \u003ccode\u003e--dependency-constraints-txt\u003c/code\u003e files through to the installer unmodified instead of re-parsing them into a\ndeduplicated set of lines, fixing a case where a hashed requirement (e.g. from \u003ccode\u003epip-compile --generate-hashes\u003c/code\u003e)\ncould have its \u003ccode\u003e--hash\u003c/code\u003e continuation line separated from its requirement line and silently dropped, depending on the\ninterpreter's hash seed - by :user:\u003ccode\u003emanfred-kaiser\u003c/code\u003e (:issue:\u003ccode\u003e1140\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/615d04cfc52ac3c1592a463f0afe484fee1cc368\"\u003e\u003ccode\u003e615d04c\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/776f702f84787525df62a5473dd13d4e2f45b977\"\u003e\u003ccode\u003e776f702\u003c/code\u003e\u003c/a\u003e fix: api should not ignore installed, only CLI (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1056\"\u003e#1056\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/42da4c4b483563819fabdb8ecf2f6df53ed82123\"\u003e\u003ccode\u003e42da4c4\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1055\"\u003e#1055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/b445cd2e736db5f80cde7d952d620a73cc26bf9d\"\u003e\u003ccode\u003eb445cd2\u003c/code\u003e\u003c/a\u003e chore: tox toml (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1033\"\u003e#1033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/c44c143876042ac6e1212a31684a3adca19beda4\"\u003e\u003ccode\u003ec44c143\u003c/code\u003e\u003c/a\u003e feat: drop 3.9, require 3.10+ (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/a9bb4560d213069b11c8068159f1de060abec5b7\"\u003e\u003ccode\u003ea9bb456\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 in the actions group...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/cb3351155ce99902580022acb81dc0adb8124d53\"\u003e\u003ccode\u003ecb33511\u003c/code\u003e\u003c/a\u003e ci: try to improve release docs (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1051\"\u003e#1051\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/70666a296c2e5bb7451f5a04eef259f6f943d0de\"\u003e\u003ccode\u003e70666a2\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.4.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/653d86586dea8b4e020086a276a15a27ac7bd25d\"\u003e\u003ccode\u003e653d865\u003c/code\u003e\u003c/a\u003e docs: fix issue with changelog generation (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1050\"\u003e#1050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/373b9ee171e2f16353365b1a9a02bc408b96ca73\"\u003e\u003ccode\u003e373b9ee\u003c/code\u003e\u003c/a\u003e tests: keep environment from leaking in Python 3.15 (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1049\"\u003e#1049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.4.2...1.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.7.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f4bc676bc101fe2235846e37044e8c693d6cbaf4\"\u003e\u003ccode\u003ef4bc676\u003c/code\u003e\u003c/a\u003e 2026.07.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/428\"\u003e#428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/4c91f9c5f9b4676d40d2930025ba04d80dd536f6\"\u003e\u003ccode\u003e4c91f9c\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.3.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/01a66c5cf32eadb8f03a0504c24cb44f6d581248\"\u003e\u003ccode\u003e01a66c5\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/eb355f41cb71f71012ecf1a4d27a57d0ee2b1337\"\u003e\u003ccode\u003eeb355f4\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/474e6fc996d55b91632248da0bade702504e62dc\"\u003e\u003ccode\u003e474e6fc\u003c/code\u003e\u003c/a\u003e Include tests in the source distribution (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/424\"\u003e#424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a31ef39bb5906af7dc9729890f7e4e04e75afdae\"\u003e\u003ccode\u003ea31ef39\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/98eb2c76a9c7a8519912023dca00f762bbcd59af\"\u003e\u003ccode\u003e98eb2c7\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.3 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.07.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMinimize internal Python API usage for interpreter and thread state sampling where possible. Avoids breaking ABI change in Python \u0026gt;= 3.15.0b4 (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/pull/269\"\u003epython-cffi/cffi#269\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\"\u003ehttps://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/fd33e7700f0ebafe6f30bd5053f13327221b77a2\"\u003e\u003ccode\u003efd33e77\u003c/code\u003e\u003c/a\u003e New release 2.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/56a7876b8cd3b2d8148233a90e0121d74cd83852\"\u003e\u003ccode\u003e56a7876\u003c/code\u003e\u003c/a\u003e Use PyGILState_Ensure to avoid accessing CPython internals (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/269\"\u003e#269\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.5.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/e239bdc5cc1eb1f0db08d4046ad531f805dbea71\"\u003e\u003ccode\u003ee239bdc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/795\"\u003e#795\u003c/a\u003e from jawah/release-3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/648ad776db64a00aa7efd70a94656ac43784abb3\"\u003e\u003ccode\u003e648ad77\u003c/code\u003e\u003c/a\u003e docs: update faq\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fab27492c39baa61aca12826022e266781108570\"\u003e\u003ccode\u003efab2749\u003c/code\u003e\u003c/a\u003e docs: write changelog for 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/7d32774e75d16cccd3d22c758a77fca135952787\"\u003e\u003ccode\u003e7d32774\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/9a69f609f254ba4bfe9d0cbf375728e43360cdf2\"\u003e\u003ccode\u003e9a69f60\u003c/code\u003e\u003c/a\u003e docs: update data/info\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5dcc6dd81a8a0a4bd525f8d6f508da8285caf402\"\u003e\u003ccode\u003e5dcc6dd\u003c/code\u003e\u003c/a\u003e perf: charinfo cache access optimization in cython\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/ea3b4479270762be1228562c590e5a212727f208\"\u003e\u003ccode\u003eea3b447\u003c/code\u003e\u003c/a\u003e fix: do not validate-decode large payload when md says it's noise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a05917f87b5f71d6022d8abe2b0af239f65c1111\"\u003e\u003ccode\u003ea05917f\u003c/code\u003e\u003c/a\u003e chore: allow setuptools 84 builds (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/3325d87c3c73fa1a8746947151faaf9a41177543\"\u003e\u003ccode\u003e3325d87\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/792\"\u003e#792\u003c/a\u003e from jawah/update-cibuildwheel-action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/77203b104216a6d578a682b5ac0514750aa988f7\"\u003e\u003ccode\u003e77203b1\u003c/code\u003e\u003c/a\u003e chore: reformat noxfile.py\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"ht...\n\n_Description has been truncated_","html_url":"https://github.com/anh1c/inventory-management/pull/34","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/anh1c%2Finventory-management/issues/34","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/34/packages"}},{"old_version":"6.0.6","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-28T03:03:54.000Z","version_change":"6.0.6 → 6.1.0","issue":{"uuid":"5274283250","node_id":"PR_kwDOTRd_vs8AAAABBScRFg","number":26,"state":"closed","title":"chore(deps): bump the dependencies group across 2 directories with 74 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-09-04T02:57:50.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-28T03:03:54.000Z","updated_at":"2026-09-04T02:57:51.000Z","time_to_close":604436,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"dependencies","update_count":74,"packages":[{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"certifi","old_version":"2026.6.17","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.1","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.5.1","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"coverage","old_version":"7.14.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django","old_version":"5.2.15","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-silk","old_version":"5.5.0","new_version":"5.5.2","repository_url":"https://github.com/jazzband/django-silk"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-stubs-ext","old_version":"6.0.6","new_version":"6.1.0","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-test-migrations","old_version":"1.5.0","new_version":"1.6.0","repository_url":"https://github.com/wemake-services/django-test-migrations"},{"name":"idna","old_version":"3.18","new_version":"3.19","repository_url":"https://github.com/kjd/idna"},{"name":"packaging","old_version":"26.2","new_version":"26.3","repository_url":"https://github.com/pypa/packaging"},{"name":"pip","old_version":"26.1.2","new_version":"26.2.1","repository_url":"https://github.com/pypa/pip"},{"name":"pip-tools","old_version":"7.5.3","new_version":"7.6.1","repository_url":"https://github.com/jazzband/pip-tools"},{"name":"prek","old_version":"0.4.5","new_version":"0.4.14","repository_url":"https://github.com/j178/prek"},{"name":"pygments","old_version":"2.20.0","new_version":"2.21.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"setuptools","old_version":"82.0.1","new_version":"84.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"sqlparse","old_version":"0.5.5","new_version":"0.6.0","repository_url":"https://github.com/andialbrecht/sqlparse"},{"name":"ty","old_version":"0.0.54","new_version":"0.0.73","repository_url":"https://github.com/astral-sh/ty"},{"name":"types-psycopg2","old_version":"2.9.21.20260518","new_version":"2.9.21.20260724","repository_url":"https://github.com/python/typeshed"},{"name":"types-pyyaml","old_version":"6.0.12.20260518","new_version":"6.0.12.20260815","repository_url":"https://github.com/python/typeshed"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"wheel","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/pypa/wheel"},{"name":"blessed","old_version":"1.44.0","new_version":"1.48.0","repository_url":"https://github.com/jquast/blessed"},{"name":"boto3","old_version":"1.43.36","new_version":"1.43.76","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.36","new_version":"1.43.76","repository_url":"https://github.com/boto/botocore"},{"name":"django-allauth","old_version":"65.14.3","new_version":"65.19.1","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1","repository_url":"https://github.com/anymail/django-anymail"},{"name":"django-filter","old_version":"25.2","new_version":"26.1","repository_url":"https://github.com/carltongibson/django-filter"},{"name":"django-js-asset","old_version":"4.0.1","new_version":"4.0.2","repository_url":"https://github.com/feincms/django-js-asset"},{"name":"django-maintenance-mode","old_version":"0.22.0","new_version":"0.23.0","repository_url":"https://github.com/fabiocaccamo/django-maintenance-mode"},{"name":"django-oauth-toolkit","old_version":"3.3.0","new_version":"3.4.0","repository_url":"https://github.com/django-oauth/django-oauth-toolkit"},{"name":"django-otp","old_version":"1.3.0","new_version":"1.7.0","repository_url":"https://github.com/django-otp/django-otp"},{"name":"django-q2","old_version":"1.10.0","new_version":"1.11.0","repository_url":"https://github.com/GDay/django-q2"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"dulwich","old_version":"1.2.6","new_version":"1.2.12","repository_url":"https://github.com/dulwich/dulwich"},{"name":"feedparser","old_version":"6.0.12","new_version":"6.0.14","repository_url":"https://github.com/kurtmckee/feedparser"},{"name":"fido2","old_version":"2.2.0","new_version":"2.2.1","repository_url":"https://github.com/Yubico/python-fido2"},{"name":"googleapis-common-protos","old_version":"1.75.0","new_version":"1.75.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.81.1","new_version":"1.83.0","repository_url":"https://github.com/grpc/grpc"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"icalendar","old_version":"7.2.0","new_version":"7.3.0","repository_url":"https://github.com/collective/icalendar"},{"name":"jinxed","old_version":"2.0.4","new_version":"2.1.0","repository_url":"https://github.com/Rockhopper-Technologies/jinxed"},{"name":"lxml","old_version":"6.1.1","new_version":"6.1.2","repository_url":"https://github.com/lxml/lxml"},{"name":"markdown","old_version":"3.10.2","new_version":"3.10.3","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.43.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.43.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.43.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.64b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-dbapi","old_version":"0.64b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.43.0","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.64b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.64b0","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"platformdirs","old_version":"4.10.0","new_version":"4.11.3","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"protobuf","old_version":"7.35.1","new_version":"7.36.0","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pypdf","old_version":"6.14.2","new_version":"6.16.1","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"pyphen","old_version":"0.17.2","new_version":"0.18.1","repository_url":"https://github.com/Kozea/Pyphen"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"python-fsutil","old_version":"0.16.1","new_version":"0.17.0","repository_url":"https://github.com/fabiocaccamo/python-fsutil"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"rpds-py","old_version":"2026.5.1","new_version":"2026.6.3","repository_url":"https://github.com/crate-py/rpds"},{"name":"s3transfer","old_version":"0.19.0","new_version":"0.19.2","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.63.0","new_version":"2.68.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"tablib","old_version":"3.9.0","new_version":"3.10.0","repository_url":"https://github.com/jazzband/tablib"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.70.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"tzdata","old_version":"2026.2","new_version":"2026.3","repository_url":"https://github.com/python/tzdata"},{"name":"wcwidth","old_version":"0.8.1","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"webencodings","old_version":"0.5.1","new_version":"0.6.1","repository_url":"https://github.com/CourtBouillon/webencodings"},{"name":"wrapt","old_version":"2.2.2","new_version":"2.3.0","repository_url":"https://github.com/GrahamDumpleton/wrapt"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dependencies group with 2 updates in the /docs directory: [mkdocs-material](https://github.com/squidfunk/mkdocs-material) and [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings).\nBumps the dependencies group with 72 updates in the /src/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.6.17` | `2026.7.22` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.1` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.5.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.3` | `7.15.4` |\n| [django](https://github.com/django/django) | `5.2.15` | `6.1` |\n| [django-silk](https://github.com/jazzband/django-silk) | `5.5.0` | `5.5.2` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [django-stubs-ext](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [django-test-migrations](https://github.com/wemake-services/django-test-migrations) | `1.5.0` | `1.6.0` |\n| [idna](https://github.com/kjd/idna) | `3.18` | `3.19` |\n| [packaging](https://github.com/pypa/packaging) | `26.2` | `26.3` |\n| [pip](https://github.com/pypa/pip) | `26.1.2` | `26.2.1` |\n| [pip-tools](https://github.com/jazzband/pip-tools) | `7.5.3` | `7.6.1` |\n| [prek](https://github.com/j178/prek) | `0.4.5` | `0.4.14` |\n| [pygments](https://github.com/pygments/pygments) | `2.20.0` | `2.21.0` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `84.0.0` |\n| [sqlparse](https://github.com/andialbrecht/sqlparse) | `0.5.5` | `0.6.0` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.54` | `0.0.73` |\n| [types-psycopg2](https://github.com/python/typeshed) | `2.9.21.20260518` | `2.9.21.20260724` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20260518` | `6.0.12.20260815` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [wheel](https://github.com/pypa/wheel) | `0.47.0` | `0.48.0` |\n| [blessed](https://github.com/jquast/blessed) | `1.44.0` | `1.48.0` |\n| [boto3](https://github.com/boto/boto3) | `1.43.36` | `1.43.76` |\n| [botocore](https://github.com/boto/botocore) | `1.43.36` | `1.43.76` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.14.3` | `65.19.1` |\n| [django-anymail](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-filter](https://github.com/carltongibson/django-filter) | `25.2` | `26.1` |\n| [django-js-asset](https://github.com/feincms/django-js-asset) | `4.0.1` | `4.0.2` |\n| [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) | `0.22.0` | `0.23.0` |\n| [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) | `3.3.0` | `3.4.0` |\n| [django-otp](https://github.com/django-otp/django-otp) | `1.3.0` | `1.7.0` |\n| [django-q2](https://github.com/GDay/django-q2) | `1.10.0` | `1.11.0` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `1.2.6` | `1.2.12` |\n| [feedparser](https://github.com/kurtmckee/feedparser) | `6.0.12` | `6.0.14` |\n| [fido2](https://github.com/Yubico/python-fido2) | `2.2.0` | `2.2.1` |\n| [googleapis-common-protos](https://github.com/googleapis/google-cloud-python) | `1.75.0` | `1.75.1` |\n| [grpcio](https://github.com/grpc/grpc) | `1.81.1` | `1.83.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [icalendar](https://github.com/collective/icalendar) | `7.2.0` | `7.3.0` |\n| [jinxed](https://github.com/Rockhopper-Technologies/jinxed) | `2.0.4` | `2.1.0` |\n| [lxml](https://github.com/lxml/lxml) | `6.1.1` | `6.1.2` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.10.2` | `3.10.3` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.43.0` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.43.0` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.43.0` | `1.44.0` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.64b0` | `0.65b0` |\n| [opentelemetry-instrumentation-dbapi](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.64b0` | `0.65b0` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.43.0` | `1.44.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.64b0` | `0.65b0` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.64b0` | `0.65b0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.10.0` | `4.11.3` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `7.35.1` | `7.36.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.14.2` | `6.16.1` |\n| [pyphen](https://github.com/Kozea/Pyphen) | `0.17.2` | `0.18.1` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n| [python-fsutil](https://github.com/fabiocaccamo/python-fsutil) | `0.16.1` | `0.17.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [rpds-py](https://github.com/crate-py/rpds) | `2026.5.1` | `2026.6.3` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.19.0` | `0.19.2` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.63.0` | `2.68.0` |\n| [tablib](https://github.com/jazzband/tablib) | `3.9.0` | `3.10.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.70.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.2` | `2026.3` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.8.1` | `0.8.2` |\n| [webencodings](https://github.com/CourtBouillon/webencodings) | `0.5.1` | `0.6.1` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `2.2.2` | `2.3.0` |\n\n\nUpdates `mkdocs-material` from 9.7.6 to 9.7.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/squidfunk/mkdocs-material/releases\"\u003emkdocs-material's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003emkdocs-material-9.7.7\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterial for MkDocs is approaching end of life\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eMaterial for MkDocs is scheduled to reach end of life on November 5, 2026. Until then, maintenance is limited to critical bug fixes and security updates. After this date, the project will remain available on PyPI and GitHub, but no further maintenance is planned except in exceptional circumstances.\u003c/p\u003e\n\u003cp\u003eFor users looking for a long-term, actively developed successor, we're building \u003ca href=\"https://zensical.org\"\u003eZensical\u003c/a\u003e – a next-generation static site generator designed for technical documentation. If you're planning a new documentation project or evaluating your long-term options, we invite you to take a look.\u003c/p\u003e\n\u003cp\u003eOrganizations requiring support beyond this date are welcome to get in touch to discuss available options.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\"\u003eRead the full announcement on our blog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a DOM-based XSS vulnerability in search suggestions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/p\"\u003e\u003ccode\u003e@​p\u003c/code\u003e\u003c/a\u003e- for responsibly reporting this issue.\u003c/p\u003e\n\u003c/blockquote\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/squidfunk/mkdocs-material/blob/master/CHANGELOG\"\u003emkdocs-material's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003emkdocs-material-9.7.7 (2026-07-17)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed DOM-based XSS vulnerability in search suggestions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.6 (2026-03-19)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAutomatically disable MkDocs 2.0 warning for forks of MkDocs\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.5 (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eLimited version range of mkdocs to \u0026lt;2\u003c/li\u003e\n\u003cli\u003eUpdated MkDocs 2.0 incompatibility warning (clarify relation with MkDocs)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.4 (2026-03-03)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHardened social cards plugin by switching to sandboxed environment\u003c/li\u003e\n\u003cli\u003eUpdated MkDocs 2.0 incompatibility warning\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.3 (2026-02-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8567\"\u003e#8567\u003c/a\u003e: Print MkDocs 2.0 incompatibility warning to stderr\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.2 (2026-02-18)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eOpened up version ranges of optional dependencies for forward-compatibility\u003c/li\u003e\n\u003cli\u003eAdded warning to 'mkdocs build' about impending MkDocs 2.0 incompatibility\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.1 (2025-12-18)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated requests to 2.30+ to mitigate CVE in urllib\u003c/li\u003e\n\u003cli\u003eFixed privacy plugin not picking up protocol-relative URLs\u003c/li\u003e\n\u003cli\u003eFixed \u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8542\"\u003e#8542\u003c/a\u003e: false positives and negatives captured in privacy plugin\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003emkdocs-material-9.7.0 (2025-11-11)\u003c/p\u003e\n\u003cp\u003e⚠️ Material for MkDocs is now in maintenance mode\u003c/p\u003e\n\u003cp\u003eThis is the last release of Material for MkDocs that will receive new features.\nGoing forward, the Material for MkDocs team focuses on Zensical, a next-gen\nstatic site generator built from first principles. We will provide critical\nbug fixes and security updates for Material for MkDocs for 12 months at least.\u003c/p\u003e\n\u003cp\u003eRead the full announcement on our blog:\n\u003ca href=\"https://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\"\u003ehttps://squidfunk.github.io/mkdocs-material/blog/2025/11/05/zensical/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis release includes all features that were previously exclusive to the\nInsiders edition. These features are now freely available to everyone.\u003c/p\u003e\n\u003cp\u003eNote on deprecated plugins: The projects and typeset plugins are included in\nthis release, but must be considered deprecated. Both plugins proved\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/squidfunk/mkdocs-material/commit/b3e6dd886a974aa8200759ecfd7db28c598a2894\"\u003e\u003ccode\u003eb3e6dd8\u003c/code\u003e\u003c/a\u003e Prepare 9.7.7 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/52fb6be8aafe326419f34dc94d3211e7bbfbfb25\"\u003e\u003ccode\u003e52fb6be\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/901e6335cc80b0f12e46a1e34bd85e983dd78a6e\"\u003e\u003ccode\u003e901e633\u003c/code\u003e\u003c/a\u003e Added \u003ccode\u003eSECURITY.md\u003c/code\u003e with EOL notice\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/5b36f2ac499a45905e246bc66bbee2858ef6556f\"\u003e\u003ccode\u003e5b36f2a\u003c/code\u003e\u003c/a\u003e Bump js-yaml from 4.1.1 to 4.2.0 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8598\"\u003e#8598\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/2d11e7bc92c59b86d6ac0da2e38044fb4befa6e0\"\u003e\u003ccode\u003e2d11e7b\u003c/code\u003e\u003c/a\u003e Bump form-data from 3.0.4 to 3.0.5 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8597\"\u003e#8597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/ae05a534a8c8e1c58eb6aa55d460d309bcfce22b\"\u003e\u003ccode\u003eae05a53\u003c/code\u003e\u003c/a\u003e Bump esbuild from 0.27.2 to 0.28.1 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8596\"\u003e#8596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/434af93166e5b90b78bba1295ca5a140fc67d0bc\"\u003e\u003ccode\u003e434af93\u003c/code\u003e\u003c/a\u003e Bump shell-quote from 1.7.3 to 1.8.4 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8593\"\u003e#8593\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/4447cdadcbe8bc82570e9f1ae2b970f461b03b68\"\u003e\u003ccode\u003e4447cda\u003c/code\u003e\u003c/a\u003e Documentation (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8590\"\u003e#8590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/8f8d551c9c5296dfc2a5ede35047bfb491d66bc9\"\u003e\u003ccode\u003e8f8d551\u003c/code\u003e\u003c/a\u003e Updated copyright year (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8588\"\u003e#8588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/squidfunk/mkdocs-material/commit/08d8514d491782b4ac46673bcfdedb2f6fc85f3d\"\u003e\u003ccode\u003e08d8514\u003c/code\u003e\u003c/a\u003e Bump fast-uri from 3.0.3 to 3.1.2 (\u003ca href=\"https://redirect.github.com/squidfunk/mkdocs-material/issues/8587\"\u003e#8587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/squidfunk/mkdocs-material/compare/9.7.6...9.7.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.4 to 1.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\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/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\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/mkdocstrings/mkdocstrings/commit/9a11dcb8e9b39ff6e1a22abdd362350de4e68e9f\"\u003e\u003ccode\u003e9a11dcb\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e\u003ccode\u003e4732798\u003c/code\u003e\u003c/a\u003e fix: Stop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ecbaa9a05dde5bdc83accf8814fa1c9a1ffe1473\"\u003e\u003ccode\u003eecbaa9a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/64260f748f3db8b301a9d6fa05b2609ab6f6876c\"\u003e\u003ccode\u003e64260f7\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003e\u003ccode\u003eacc0da3\u003c/code\u003e\u003c/a\u003e fix: Parse inventory project and version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ec45a9b7a1301a4c70e02e6c92e1b9caff6df61f\"\u003e\u003ccode\u003eec45a9b\u003c/code\u003e\u003c/a\u003e ci: Fix warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ce2199c5195535f8c3b4907dd3ac7de2181925cc\"\u003e\u003ccode\u003ece2199c\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README (\u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/823\"\u003e#823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asgiref` from 3.11.1 to 3.12.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/asgiref/blob/main/CHANGELOG.txt\"\u003easgiref's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.1 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRestored the previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape, which was\nrelied on by some APM services. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/572\"\u003e#572\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNote, this change was available whilst maintaining the underlying fix (from\n\u003ca href=\"https://redirect.github.com/django/asgiref/issues/564\"\u003e#564\u003c/a\u003e). It does not constitute an API stability promise. Ideally APMs are\n\u003cem\u003enot\u003c/em\u003e monkey patching internal APIs, and future changes will be made here if\nneeded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12.0 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAsyncToSync\u003c/code\u003e no longer captures the running event loop on\ninstantiation. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis resolves a series of deadlocks that users experienced after asgiref 3.9.0,\nparticularly with pytest-asyncio. pytest-asyncio stops the event loop between\ntests, and long-running unawaited futures could find themselves trying to\nschedule work onto a stopped loop, and so would never complete. Ideally, code\nshould be structured to await long-running futures before returning, but this\nchange should help users experiencing issues here.\u003c/p\u003e\n\u003cp\u003eThe loop is now resolved when the callable is invoked rather than when it is\ncreated. If \u003ccode\u003easync_to_sync\u003c/code\u003e is called from within \u003ccode\u003esync_to_async\u003c/code\u003e, the\nparent event loop is still used, as before.\u003c/p\u003e\n\u003cp\u003eThe possibility of deadlock therefore remains in some nested patterns. For\nexample, an async function may call a long-running \u003ccode\u003esync_to_async\u003c/code\u003e function\nthat itself uses \u003ccode\u003easync_to_sync\u003c/code\u003e; if the outer function returns before the\nsync future completes, the parent event loop may already be stopped, and the\nnested calls cannot be driven to completion.\u003c/p\u003e\n\u003cp\u003eThis is not a bug in asgiref — the same patterns deadlock in plain asyncio. As\nabove, restructure your code to await the \u003ccode\u003esync_to_async\u003c/code\u003e future before\nexiting the driving coroutine.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an event loop deadlock when exiting \u003ccode\u003eThreadSensitiveContext\u003c/code\u003e\nwhile its executor thread was still blocked waiting on the event loop.\n(\u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for EOL Python 3.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eStatelessServer.run()\u003c/code\u003e failing on Python 3.14, where\n\u003ccode\u003easyncio.get_event_loop()\u003c/code\u003e no longer creates an event loop if none\nexists. It now uses \u003ccode\u003easyncio.run()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/559\"\u003e#559\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eLocal\u003c/code\u003e leaking data between unrelated sync threads when\n\u003ccode\u003esys.flags.thread_inherit_context\u003c/code\u003e is enabled (Python 3.14+), so a newly\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/ef9d4b8b371cf8a7bb63dea3d0fdc60923e9e081\"\u003e\u003ccode\u003eef9d4b8\u003c/code\u003e\u003c/a\u003e Releasing 3.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/34fba6328f67a753d814c280811fd34094bd1f6c\"\u003e\u003ccode\u003e34fba63\u003c/code\u003e\u003c/a\u003e Restore previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a43900c131874be571c6afdca642d4054eed0acf\"\u003e\u003ccode\u003ea43900c\u003c/code\u003e\u003c/a\u003e Separate mypy from tests extra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/1b7c338591054c04ff6c140d899ced28b803b4e0\"\u003e\u003ccode\u003e1b7c338\u003c/code\u003e\u003c/a\u003e Releasing 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/157d9d4168434d73b1bb5a619f947b74ccbf1fc8\"\u003e\u003ccode\u003e157d9d4\u003c/code\u003e\u003c/a\u003e Renovate precommit (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/deda0d4fd8d3997dddd9646dd9ef7e0b6d3e59a5\"\u003e\u003ccode\u003ededa0d4\u003c/code\u003e\u003c/a\u003e Test free-threading builds and fix Local data leak for thread_inherit_context...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a54250a24ad770616d3afcc37af3186558562041\"\u003e\u003ccode\u003ea54250a\u003c/code\u003e\u003c/a\u003e Don’t capture the event loop in \u003ccode\u003eAsyncToSync.__init__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/836356a2802247a0963177197b50cbd7476d7950\"\u003e\u003ccode\u003e836356a\u003c/code\u003e\u003c/a\u003e Use asyncio.run in StatelessServer.run (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/e04afd54ba29bb277ba6177dc898c73c129446f3\"\u003e\u003ccode\u003ee04afd5\u003c/code\u003e\u003c/a\u003e Dropped support for Python 3.9. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/543\"\u003e#543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/95d2430a346be7f40652d2eabff84fe54fbc725d\"\u003e\u003ccode\u003e95d2430\u003c/code\u003e\u003c/a\u003e Fixed \u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e: ThreadSensitiveContext.\u003cstrong\u003eaexit\u003c/strong\u003e blocking the event loop. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/563\"\u003e#563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/asgiref/compare/3.11.1...3.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.6.17 to 2026.7.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f4bc676bc101fe2235846e37044e8c693d6cbaf4\"\u003e\u003ccode\u003ef4bc676\u003c/code\u003e\u003c/a\u003e 2026.07.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/428\"\u003e#428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/4c91f9c5f9b4676d40d2930025ba04d80dd536f6\"\u003e\u003ccode\u003e4c91f9c\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.3.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/01a66c5cf32eadb8f03a0504c24cb44f6d581248\"\u003e\u003ccode\u003e01a66c5\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/eb355f41cb71f71012ecf1a4d27a57d0ee2b1337\"\u003e\u003ccode\u003eeb355f4\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/474e6fc996d55b91632248da0bade702504e62dc\"\u003e\u003ccode\u003e474e6fc\u003c/code\u003e\u003c/a\u003e Include tests in the source distribution (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/424\"\u003e#424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a31ef39bb5906af7dc9729890f7e4e04e75afdae\"\u003e\u003ccode\u003ea31ef39\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/98eb2c76a9c7a8519912023dca00f762bbcd59af\"\u003e\u003ccode\u003e98eb2c7\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.3 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.06.17...2026.07.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMinimize internal Python API usage for interpreter and thread state sampling where possible. Avoids breaking ABI change in Python \u0026gt;= 3.15.0b4 (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/pull/269\"\u003epython-cffi/cffi#269\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\"\u003ehttps://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/fd33e7700f0ebafe6f30bd5053f13327221b77a2\"\u003e\u003ccode\u003efd33e77\u003c/code\u003e\u003c/a\u003e New release 2.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/56a7876b8cd3b2d8148233a90e0121d74cd83852\"\u003e\u003ccode\u003e56a7876\u003c/code\u003e\u003c/a\u003e Use PyGILState_Ensure to avoid accessing CPython internals (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/269\"\u003e#269\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/270\"\u003e#270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.5.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.5.0...3.5.1\"\u003e3.5.1\u003c/a\u003e (2026-08-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRaised upper bound of setuptools to v84 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache performance access optimization for our CharInfo struct (prebuilt only).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer decoding large content when the noise detector output give a high entropy.\nOnly impacted large content input \u0026gt;1M bytes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.9...3.5.0\"\u003e3.5.0\u003c/a\u003e (2026-08-12)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExplicit support for Python 3.15\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComparing a CharsetMatch to a non-alias encoding strings (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/773\"\u003e#773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReturn 0.0 CharsetMatch.multi_byte_usage for empty payloads instead of crashing (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eA file with both a charset declaration and BOM/SIG did not verify first the BOM/SIG charset.\u003c/li\u003e\n\u003cli\u003eiso2022* cases misdetected due to a flaw in our multibyte chunking logic.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced the optional mypyc build with Cython extensions while retaining the\npure Python fallback. The previous engine (mypyc) started to hit rough limit around\nthe optimization of our noise/coherence detector while Cython allows us to\nsteer the engine toward the right generated optimized sources.\nThis change SHOULD not impact bundler (e.g. Pyinstaller) as the module are\nimmediately discoverable (i.e. not hidden import like mypyc did).\nMoreover, a long wished distribution is the abi3 wheels, this will allow us\nto no longer rush each year when a new Python interpreter is released.\nWe still distribute the interpreter specific wheels for faster performance.\u003c/li\u003e\n\u003cli\u003eApplied micro-optimization on several utils.\u003c/li\u003e\n\u003cli\u003eCharsetMatches no longer sort on each match insertion.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved an old performance optimization attempt in apy.py (success_fast_tracked+payload_result_cache).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/e239bdc5cc1eb1f0db08d4046ad531f805dbea71\"\u003e\u003ccode\u003ee239bdc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/795\"\u003e#795\u003c/a\u003e from jawah/release-3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/648ad776db64a00aa7efd70a94656ac43784abb3\"\u003e\u003ccode\u003e648ad77\u003c/code\u003e\u003c/a\u003e docs: update faq\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fab27492c39baa61aca12826022e266781108570\"\u003e\u003ccode\u003efab2749\u003c/code\u003e\u003c/a\u003e docs: write changelog for 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/7d32774e75d16cccd3d22c758a77fca135952787\"\u003e\u003ccode\u003e7d32774\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/9a69f609f254ba4bfe9d0cbf375728e43360cdf2\"\u003e\u003ccode\u003e9a69f60\u003c/code\u003e\u003c/a\u003e docs: update data/info\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5dcc6dd81a8a0a4bd525f8d6f508da8285caf402\"\u003e\u003ccode\u003e5dcc6dd\u003c/code\u003e\u003c/a\u003e perf: charinfo cache access optimization in cython\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/ea3b4479270762be1228562c590e5a212727f208\"\u003e\u003ccode\u003eea3b447\u003c/code\u003e\u003c/a\u003e fix: do not validate-decode large payload when md says it's noise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a05917f87b5f71d6022d8abe2b0af239f65c1111\"\u003e\u003ccode\u003ea05917f\u003c/code\u003e\u003c/a\u003e chore: allow setuptools 84 builds (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/794\"\u003e#794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/3325d87c3c73fa1a8746947151faaf9a41177543\"\u003e\u003ccode\u003e3325d87\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/792\"\u003e#792\u003c/a\u003e from jawah/update-cibuildwheel-action\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/77203b104216a6d578a682b5ac0514750aa988f7\"\u003e\u003ccode\u003e77203b1\u003c/code\u003e\u003c/a\u003e chore: reformat noxfile.py\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.14.3 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.0 — 2026-07-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSince 7.14.0, reporting commands implicitly combine parallel data files. Now those commands have a new option \u003ccode\u003e--keep-combined\u003c/code\u003e to retain the data files after combining them instead of the default, which is to delete them. Finishes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2198\"\u003eissue 2198\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report would incorrectly count excluded functions as uncovered, as described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2205\"\u003eissue 2205\u003c/a\u003e. This is now fixed thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2206\"\u003eMartin Kuntz Jacobsen\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWhen running your program, coverage now correctly sets \u003ccode\u003eyourmodule.__spec__.loader\u003c/code\u003e as \u003ca href=\"\"\u003estrongly recommended\u003c/a\u003e, avoiding the deprecation warning described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2208\"\u003eissue 2208\u003c/a\u003e. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2209\"\u003eA5rocks\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: with Python 3.10, running with the \u003ccode\u003e-I\u003c/code\u003e (isolated mode) option didn’t correctly omit the current directory from the module search path, as described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2103\"\u003eissue 2103\u003c/a\u003e. That is now fixed thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2211\"\u003eIlia Sorokin\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.0\"\u003ecoverage 7.15.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.0\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically\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/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.3...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django` from 5.2.15 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/5.2.15...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-silk` from 5.5.0 to 5.5.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jazzband/django-silk/releases\"\u003edjango-silk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.5.2\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/jazzband/django-silk/tree/5.5.2\"\u003e5.5.2\u003c/a\u003e (2026-08-11)\u003c/h2\u003e\n\u003cp\u003e:release-by: Albert Wang (\u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e)\n\u003ca href=\"https://github.com/jazzband/django-silk/compare/5.5.0..5.5.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis is a re-release of 5.5.1 due to build/release issues.\u003c/p\u003e\n\u003cp\u003eThis will be the final release to support Django 4.2 and Django 5.1.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix making a release build (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/897\"\u003e#897\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/jazzband/django-silk/tree/5.5.1\"\u003e5.5.1\u003c/a\u003e (2026-08-01)\u003c/h2\u003e\n\u003cp\u003e:release-by: Albert Wang (\u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e)\n\u003ca href=\"https://github.com/jazzband/django-silk/compare/5.5.0..5.5.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis will be the final release to support Django 4.2 and Django 5.1\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix HTML in request_summary.html (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/852\"\u003e#852\u003c/a\u003e) \u003ca href=\"https://github.com/JortRoelofs\"\u003e\u003ccode\u003e@​JortRoelofs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix filtering for JS content (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/868\"\u003e#868\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix silk collector finalise raising TypeError when a \u0026quot;model\u0026quot; key is present in query dict (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/872\"\u003e#872\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExclude NULL view_names from View filter dropdown (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/882\"\u003e#882\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix FiltersManager.get() raising AttributeError without session support (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/887\"\u003e#887\u003c/a\u003e) \u003ca href=\"https://github.com/agu2347\"\u003e\u003ccode\u003e@​agu2347\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AttributeError generating curl command for non-string query params (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/885\"\u003e#885\u003c/a\u003e) \u003ca href=\"https://github.com/agu2347\"\u003e\u003ccode\u003e@​agu2347\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures/Enhancements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/892\"\u003e#892\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\u003cp\u003e\u003cstrong\u003eMaintenance and Cleanup:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix test coverage flakiness (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/850\"\u003e#850\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix test project (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/871\"\u003e#871\u003c/a\u003e) \u003ca href=\"https://github.com/VaishnavGhenge\"\u003e\u003ccode\u003e@​VaishnavGhenge\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDependency updates\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e5.5.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/jazzband/django-silk/tree/5.5.1\"\u003e5.5.1\u003c/a\u003e (2026-08-01)\u003c/h2\u003e\n\u003cp\u003e:release-by: Albert Wang (\u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e)\n\u003ca href=\"https://github.com/jazzband/django-silk/compare/5.5.0..5.5.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis will be the final release to support Django 4.2 and Django 5.1\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix HTML in request_summary.html (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/852\"\u003e#852\u003c/a\u003e) \u003ca href=\"https://github.com/JortRoelofs\"\u003e\u003ccode\u003e@​JortRoelofs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix filtering for JS content (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/868\"\u003e#868\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix silk collector finalise raising TypeError when a \u0026quot;model\u0026quot; key is present in query dict (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/872\"\u003e#872\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jazzband/django-silk/blob/master/CHANGELOG.md\"\u003edjango-silk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/jazzband/django-silk/tree/5.5.2\"\u003e5.5.2\u003c/a\u003e (2026-08-11)\u003c/h2\u003e\n\u003cp\u003e:release-by: Albert Wang (\u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e)\n\u003ca href=\"https://github.com/jazzband/django-silk/compare/5.5.0..5.5.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis is a re-release of 5.5.1 due to build/release issues.\u003c/p\u003e\n\u003cp\u003eThis will be the final release to support Django 4.2 and Django 5.1.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix making a release build (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/897\"\u003e#897\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/jazzband/django-silk/tree/5.5.1\"\u003e5.5.1\u003c/a\u003e (2026-08-01)\u003c/h2\u003e\n\u003cp\u003e:release-by: Albert Wang (\u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e)\n\u003ca href=\"https://github.com/jazzband/django-silk/compare/5.5.0..5.5.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis will be the final release to support Django 4.2 and Django 5.1\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFixes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix HTML in request_summary.html (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/852\"\u003e#852\u003c/a\u003e) \u003ca href=\"https://github.com/JortRoelofs\"\u003e\u003ccode\u003e@​JortRoelofs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix filtering for JS content (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/868\"\u003e#868\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix silk collector finalise raising TypeError when a \u0026quot;model\u0026quot; key is present in query dict (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/872\"\u003e#872\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExclude NULL view_names from View filter dropdown (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/882\"\u003e#882\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix FiltersManager.get() raising AttributeError without session support (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/887\"\u003e#887\u003c/a\u003e) \u003ca href=\"https://github.com/agu2347\"\u003e\u003ccode\u003e@​agu2347\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AttributeError generating curl command for non-string query params (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/885\"\u003e#885\u003c/a\u003e) \u003ca href=\"https://github.com/agu2347\"\u003e\u003ccode\u003e@​agu2347\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFeatures/Enhancements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.15 (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/892\"\u003e#892\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\u003cp\u003e\u003cstrong\u003eMaintenance and Cleanup:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix test coverage flakiness (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/850\"\u003e#850\u003c/a\u003e) \u003ca href=\"https://github.com/albertyw\"\u003e\u003ccode\u003e@​albertyw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix test project (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/871\"\u003e#871\u003c/a\u003e) \u003ca href=\"https://github.com/VaishnavGhenge\"\u003e\u003ccode\u003e@​VaishnavGhenge\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDependency updates\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/jazzband/django-silk/commit/e04dc567b0a17bbd8630f3e0dbffaabf2bfb97c0\"\u003e\u003ccode\u003ee04dc56\u003c/code\u003e\u003c/a\u003e Release 5.5.2 (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/899\"\u003e#899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/d73d5deb0db91af13d819ba0153b2466f2f0dcd3\"\u003e\u003ccode\u003ed73d5de\u003c/code\u003e\u003c/a\u003e Build releases with PEP 517 so setuptools_scm dependencies resolve (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/897\"\u003e#897\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/9bcf96475f032d3ea2738e863a52d263dd276c4b\"\u003e\u003ccode\u003e9bcf964\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/898\"\u003e#898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/4e1f4872538c38f01ee330acdcedabfdf079e018\"\u003e\u003ccode\u003e4e1f487\u003c/code\u003e\u003c/a\u003e Release 5.5.1 (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/894\"\u003e#894\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/0b256184243148e8ca56e145229b7422443c72fe\"\u003e\u003ccode\u003e0b25618\u003c/code\u003e\u003c/a\u003e Backfill tests (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/896\"\u003e#896\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/c139195ca8d9461860525e8454e4573f6ca6beba\"\u003e\u003ccode\u003ec139195\u003c/code\u003e\u003c/a\u003e Replace filter actions with native buttons (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/890\"\u003e#890\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/92f3c6bf54d68900802385b20f524cde69ad2c3b\"\u003e\u003ccode\u003e92f3c6b\u003c/code\u003e\u003c/a\u003e Simplify structure of TestFiltersManager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/7f25b9ff017eb138de6fea598bf46b23a1c49856\"\u003e\u003ccode\u003e7f25b9f\u003c/code\u003e\u003c/a\u003e Fix AttributeError generating curl command for non-string query params (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/885\"\u003e#885\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/db21120d4f4ec582c7f5934a062dfcdb5f84c6b0\"\u003e\u003ccode\u003edb21120\u003c/code\u003e\u003c/a\u003e Fix FiltersManager.get() raising AttributeError without session support (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/887\"\u003e#887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jazzband/django-silk/commit/9dfaa1de97800abec0eccf274f13b04d49d4ec8b\"\u003e\u003ccode\u003e9dfaa1d\u003c/code\u003e\u003c/a\u003e Exclude NULL view_names from the View filter dropdown (\u003ca href=\"https://redirect.github.com/jazzband/django-silk/issues/882\"\u003e#882\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jazzband/django-silk/compare/5.5.0...5.5.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs` from 6.0.6 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.6...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs-ext` from 6.0.6 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com...\n\n_Description has been truncated_","html_url":"https://github.com/Fawwad-Hassan/AIO_HWInventory/pull/26","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fawwad-Hassan%2FAIO_HWInventory/issues/26","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/26/packages"}},{"old_version":"6.0.7","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-25T08:22:03.000Z","version_change":"6.0.7 → 6.1.0","issue":{"uuid":"5243643953","node_id":"PR_kwDOUDghOM8AAAABA6DMVw","number":5,"state":"closed","title":"Bump the python group with 15 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T14:38:03.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-25T08:22:03.000Z","updated_at":"2026-09-04T14:38:05.000Z","time_to_close":886560,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":15,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"coverage","old_version":"7.15.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djangorestframework-stubs","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.43.2","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.1","new_version":"0.16.4","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 15 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.3` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.1` | `3.18.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.43.2` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.1` | `0.16.4` |\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.3 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.3...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.7 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.7...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field\u003c/code\u003e corrupting concatenated keys (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/02a46831ceb213421761f312e1368fa7b7e796d9\"\u003e\u003ccode\u003e02a4683\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etestcase_databases\u003c/code\u003e mapping of \u003ccode\u003emulti_db = False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/bc85eb958b63b752cbd7454d6378e51ca50d891d\"\u003e\u003ccode\u003ebc85eb9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_decorators\u003c/code\u003e hoisting values above their definitions (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/4eb5abf3734ba10c96dd53abdf98e50c78c4adae\"\u003e\u003ccode\u003e4eb5abf\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_register\u003c/code\u003e referencing models defined after the admin class (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d782084a4fe43286d6b4b2d11676efad0a1356cb\"\u003e\u003ccode\u003ed782084\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003esettings_storages\u003c/code\u003e erasing settings referenced elsewhere (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/2f3eb7571f87ae8c62389ac8f977935f81fbe58e\"\u003e\u003ccode\u003e2f3eb75\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etest_http_headers\u003c/code\u003e precedence when merging into \u003ccode\u003eheaders=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d750615a98098ff0c44477041932a04089d5aa47\"\u003e\u003ccode\u003ed750615\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003estringagg\u003c/code\u003e moving import despite bare \u003ccode\u003eStringAgg\u003c/code\u003e references (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/49cb8b9c2297d329a8f858beb54fb34e7274830a\"\u003e\u003ccode\u003e49cb8b9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eutils_timezone\u003c/code\u003e matching aliased \u003ccode\u003eutc\u003c/code\u003e imports (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-upgrade/compare/1.31.1...1.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework-stubs` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/releases\"\u003edjangorestframework-stubs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThis is the first version to be based on DRF 3.18\u003c/li\u003e\n\u003cli\u003eThis is the last version to support \u003ccode\u003edjango-stubs\u003c/code\u003e 6.0.x - next release will require 6.1.x\u003c/li\u003e\n\u003cli\u003eThis is the last ver...\n\n_Description has been truncated_","html_url":"https://github.com/rl-institut/SustAgriTool/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/rl-institut%2FSustAgriTool/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"}},{"old_version":"6.0.5","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-24T09:25:58.000Z","version_change":"6.0.5 → 6.1.0","issue":{"uuid":"5233154581","node_id":"PR_kwDOS9VYHs8AAAABAxtqTQ","number":66,"state":"closed","title":"chore(deps): bump the python group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T09:11:09.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-24T09:25:58.000Z","updated_at":"2026-09-04T09:11:11.000Z","time_to_close":949511,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python","update_count":20,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"redis","old_version":"8.0.0","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"coverage","old_version":"7.14.1","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.5","new_version":"6.1.0"},{"name":"djangorestframework-stubs","old_version":"3.17.0","new_version":"3.18.0","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.39.2","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest","old_version":"9.1.0","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.18","new_version":"0.16.4","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail[mailgun]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.0` | `8.1.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.1` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.5` | `6.1.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.0` | `3.18.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.39.2` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.1.0` | `9.1.1` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.18` | `0.16.4` |\n\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[mailgun]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[mailgun]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[mailgun]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `drf-spectacular` from 0.29.0 to 0.30.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tfranzel/drf-spectacular/releases\"\u003edrf-spectacular's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.30.0\u003c/h2\u003e\n\u003cp\u003eAfter working through the backlog for several week, we are finally in a comfortable place again. Thank you to all contributors and users that waited patiently for me the catch up. It does not include all the PRs that were opened, but imho the most critical ones.\u003c/p\u003e\n\u003cp\u003eThis release includes many small improvement, a few bug fixes, updates to the test suite and a renovated test matrix. Some minor schema corrections are to be expected, but nothing drastic. It is mostly fixing small inconsistencies and improving corner cases.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression introduced in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1450\"\u003e#1450\u003c/a\u003e by \u003ca href=\"https://github.com/hoefling\"\u003e\u003ccode\u003e@​hoefling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1469\"\u003etfranzel/drf-spectacular#1469\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dependency definition for Django 5.2 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1487\"\u003etfranzel/drf-spectacular#1487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add support for Django 6.0 and and DRF 3.17 by \u003ca href=\"https://github.com/vgrozdanic\"\u003e\u003ccode\u003e@​vgrozdanic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1496\"\u003etfranzel/drf-spectacular#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Support for unsigned integers uint16, uint32 and uint64 by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1483\"\u003etfranzel/drf-spectacular#1483\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplement x-spec-enum-id for type hint Choices. by \u003ca href=\"https://github.com/noamkush\"\u003e\u003ccode\u003e@​noamkush\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1486\"\u003etfranzel/drf-spectacular#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarifies Docs in Customizations.rst by \u003ca href=\"https://github.com/APCBoston\"\u003e\u003ccode\u003e@​APCBoston\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1489\"\u003etfranzel/drf-spectacular#1489\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd setting to disable docstring extraction by \u003ca href=\"https://github.com/philipstarkey\"\u003e\u003ccode\u003e@​philipstarkey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1491\"\u003etfranzel/drf-spectacular#1491\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add support for polymorphic built-in drf support by \u003ca href=\"https://github.com/mastacheata\"\u003e\u003ccode\u003e@​mastacheata\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1490\"\u003etfranzel/drf-spectacular#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocument \u003ccode\u003edjango-rest-knox\u003c/code\u003e support by \u003ca href=\"https://github.com/johnthagen\"\u003e\u003ccode\u003e@​johnthagen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1503\"\u003etfranzel/drf-spectacular#1503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd help text to spectacular management command arguments \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1175\"\u003e#1175\u003c/a\u003e by \u003ca href=\"https://github.com/jbbqqf\"\u003e\u003ccode\u003e@​jbbqqf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1502\"\u003etfranzel/drf-spectacular#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echange conflicting license field for 3.8 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1504\"\u003etfranzel/drf-spectacular#1504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePr1438 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1505\"\u003etfranzel/drf-spectacular#1505\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd blueprint for django-rest-knox by \u003ca href=\"https://github.com/johnthagen\"\u003e\u003ccode\u003e@​johnthagen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1506\"\u003etfranzel/drf-spectacular#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePr1499 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1511\"\u003etfranzel/drf-spectacular#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eType hint build_bearer_security_scheme_object by \u003ca href=\"https://github.com/johnthagen\"\u003e\u003ccode\u003e@​johnthagen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1509\"\u003etfranzel/drf-spectacular#1509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHousekeeping by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1512\"\u003etfranzel/drf-spectacular#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePr1501 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1514\"\u003etfranzel/drf-spectacular#1514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nullable FileField response schema when blank=True (\u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1493\"\u003e#1493\u003c/a\u003e) by \u003ca href=\"https://github.com/mojtabasohrabi\"\u003e\u003ccode\u003e@​mojtabasohrabi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1501\"\u003etfranzel/drf-spectacular#1501\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/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1487\"\u003etfranzel/drf-spectacular#1487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vgrozdanic\"\u003e\u003ccode\u003e@​vgrozdanic\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1496\"\u003etfranzel/drf-spectacular#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/noamkush\"\u003e\u003ccode\u003e@​noamkush\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1486\"\u003etfranzel/drf-spectacular#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/APCBoston\"\u003e\u003ccode\u003e@​APCBoston\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1489\"\u003etfranzel/drf-spectacular#1489\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/philipstarkey\"\u003e\u003ccode\u003e@​philipstarkey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1491\"\u003etfranzel/drf-spectacular#1491\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mastacheata\"\u003e\u003ccode\u003e@​mastacheata\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1490\"\u003etfranzel/drf-spectacular#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jbbqqf\"\u003e\u003ccode\u003e@​jbbqqf\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1502\"\u003etfranzel/drf-spectacular#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mojtabasohrabi\"\u003e\u003ccode\u003e@​mojtabasohrabi\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1501\"\u003etfranzel/drf-spectacular#1501\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tfranzel/drf-spectacular/compare/0.29.0...0.30.0\"\u003ehttps://github.com/tfranzel/drf-spectacular/compare/0.29.0...0.30.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/tfranzel/drf-spectacular/blob/master/CHANGELOG.rst\"\u003edrf-spectacular's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.30.0 (2026-07-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd OAS 3.2 schema for validation \u0026amp; test\u003c/li\u003e\n\u003cli\u003eType hint build_bearer_security_scheme_object (\u003ccode\u003e[#1509](https://github.com/tfranzel/drf-spectacular/issues/1509) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1509\u0026gt;\u003c/code\u003e_) [johnthagen]\u003c/li\u003e\n\u003cli\u003eFix formatted CharField allow_blank handling (\u003ccode\u003e[#1511](https://github.com/tfranzel/drf-spectacular/issues/1511) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1511\u0026gt;\u003c/code\u003e\u003cem\u003e, (\u003ccode\u003e[#1499](https://github.com/tfranzel/drf-spectacular/issues/1499) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1499\u0026gt;\u003c/code\u003e\u003c/em\u003e)) [Luciano de la Iglesia]\u003c/li\u003e\n\u003cli\u003eConsider allOf anyOf with nullable on OAS3.1 \u003ccode\u003e[#1480](https://github.com/tfranzel/drf-spectacular/issues/1480) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1480\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eProper handling for OAS 3.2\u003c/li\u003e\n\u003cli\u003efix modification of user-provided schematas \u003ccode\u003e[#1500](https://github.com/tfranzel/drf-spectacular/issues/1500) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1500\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003erelax contraint on oneOf null case with OAS3.1 \u003ccode\u003e[#1480](https://github.com/tfranzel/drf-spectacular/issues/1480) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1480\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eAdd blueprint for django-rest-knox (\u003ccode\u003e[#1506](https://github.com/tfranzel/drf-spectacular/issues/1506) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1506\u0026gt;\u003c/code\u003e_) [johnthagen]\u003c/li\u003e\n\u003cli\u003eMitigate GeneratedField lost arguments and special case for DecimalField \u003ccode\u003e[#1166](https://github.com/tfranzel/drf-spectacular/issues/1166) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1166\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eWebhook explicit operationId (\u003ccode\u003e[#1505](https://github.com/tfranzel/drf-spectacular/issues/1505) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1505\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003echange conflicting license field for 3.8 (\u003ccode\u003e[#1504](https://github.com/tfranzel/drf-spectacular/issues/1504) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1504\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eDocument django-rest-knox support [johnthagen]\u003c/li\u003e\n\u003cli\u003eadd help text to spectacular management command arguments \u003ccode\u003e[#1175](https://github.com/tfranzel/drf-spectacular/issues/1175) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1175\u0026gt;\u003c/code\u003e_ [Jean-Baptiste Braun]\u003c/li\u003e\n\u003cli\u003eMark FileField as nullable in response when not required \u003ccode\u003e[#1493](https://github.com/tfranzel/drf-spectacular/issues/1493) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1493\u0026gt;\u003c/code\u003e_ [mojtaba sohrabi]\u003c/li\u003e\n\u003cli\u003eExtend Choices hint fix with generated label description \u003ccode\u003e[#1486](https://github.com/tfranzel/drf-spectacular/issues/1486) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1486\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eSuppress py\u0026lt;=3.14 deprecation warning \u003ccode\u003e[#1497](https://github.com/tfranzel/drf-spectacular/issues/1497) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1497\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eRemove ancient DRF3.11 and Django2.2 due to contrib packages failing\u003c/li\u003e\n\u003cli\u003efeat: add support for django 6.0 and and drf 3.17 [Vjeran Grozdanic]\u003c/li\u003e\n\u003cli\u003eAdd setting to disable docstring extraction [Phil Starkey]\u003c/li\u003e\n\u003cli\u003efeat: add support for polymorphic built-in drf support [Benedikt Bauer]\u003c/li\u003e\n\u003cli\u003eClarifies post-processing hooks [Andy Piltser-Cowan]\u003c/li\u003e\n\u003cli\u003eClarifies customizations step 5 [Andy Piltser-Cowan]\u003c/li\u003e\n\u003cli\u003eFix dependency definition for Django 5.2 [Ülgen Sarıkavak]\u003c/li\u003e\n\u003cli\u003eImplement x-spec-enum-id for type hint Choices. [Noam Kushinsky]\u003c/li\u003e\n\u003cli\u003eAdd Support for unsigned integers uint16, uint32 and uint64 [Nicolas Delaby]\u003c/li\u003e\n\u003cli\u003eFix regression introduced in \u003ccode\u003e[#1450](https://github.com/tfranzel/drf-spectacular/issues/1450) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1450\u0026gt;\u003c/code\u003e_ (\u003ccode\u003e[#1469](https://github.com/tfranzel/drf-spectacular/issues/1469) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1469\u0026gt;\u003c/code\u003e_) [Oleg Höfling]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBreaking changes / important additions:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMany small improvement, bug fixes, updates to the test suite and renovated test matrix. Some minor schema corrections are to be expected, but nothing drastic.\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/tfranzel/drf-spectacular/commit/1a5c44a15b2d06744f49285f1f58992f938a05fa\"\u003e\u003ccode\u003e1a5c44a\u003c/code\u003e\u003c/a\u003e version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/6ba553fc827613d7b36efc9d9f53043e4a2e5443\"\u003e\u003ccode\u003e6ba553f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1514\"\u003e#1514\u003c/a\u003e from tfranzel/pr1501\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/d4787a4e2ef0ff4b7c6a72fe3dddf1ea8e8a963c\"\u003e\u003ccode\u003ed4787a4\u003c/code\u003e\u003c/a\u003e Adapt FileField null handling \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/d8679422975c68bc3a2c97c278957ec043d915c1\"\u003e\u003ccode\u003ed867942\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1512\"\u003e#1512\u003c/a\u003e from tfranzel/housekeeping26\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/5685cf8b731f9a93d9c66003ac2569d4ef7540a8\"\u003e\u003ccode\u003e5685cf8\u003c/code\u003e\u003c/a\u003e Add OAS 3.2 schema for validation \u0026amp; test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/9fa6f7c1f8d99ef14d9dfa11b89f432ba370242f\"\u003e\u003ccode\u003e9fa6f7c\u003c/code\u003e\u003c/a\u003e minor cleanup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/69033ea1e371fb254731c9e9164fd403ace3c5d4\"\u003e\u003ccode\u003e69033ea\u003c/code\u003e\u003c/a\u003e update linting version due to misleading security warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/d9e0de6717c9953b3e9c66da6a5bc6aefb714827\"\u003e\u003ccode\u003ed9e0de6\u003c/code\u003e\u003c/a\u003e Type hint build_bearer_security_scheme_object (\u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1509\"\u003e#1509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/9b18b302b697ba1a5e86271a7e4d090a5995cc21\"\u003e\u003ccode\u003e9b18b30\u003c/code\u003e\u003c/a\u003e Pr1499 (\u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1511\"\u003e#1511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/6e3c72ea5df8e8452a2b8c3e792a7cab23814446\"\u003e\u003ccode\u003e6e3c72e\u003c/code\u003e\u003c/a\u003e Consider allOf anyOf with nullable on OAS3.1 \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1480\"\u003e#1480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tfranzel/drf-spectacular/compare/0.29.0...0.30.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.0 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDI...\n\n_Description has been truncated_","html_url":"https://github.com/hhhylaiii/maiagent_reply_platform/pull/66","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/hhhylaiii%2Fmaiagent_reply_platform/issues/66","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/66/packages"}},{"old_version":"6.0.7","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-24T08:00:08.000Z","version_change":"6.0.7 → 6.1.0","issue":{"uuid":"5232428120","node_id":"PR_kwDOToTEA88AAAABAxIriw","number":20,"state":"closed","title":"build(deps): bump the python group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T07:57:59.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-24T08:00:08.000Z","updated_at":"2026-09-04T07:58:01.000Z","time_to_close":950271,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python","update_count":16,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"yfinance","old_version":"1.5.2","new_version":"1.6.0","repository_url":"https://github.com/ranaroussi/yfinance"},{"name":"coverage","old_version":"7.15.2","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djangorestframework-stubs","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.43.1","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.1","new_version":"0.16.4","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [yfinance](https://github.com/ranaroussi/yfinance) | `1.5.2` | `1.6.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.2` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.1` | `3.18.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.43.1` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.1` | `0.16.4` |\n\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `yfinance` from 1.5.2 to 1.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ranaroussi/yfinance/releases\"\u003eyfinance's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.6.0\u003c/h2\u003e\n\u003cp\u003eMain changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePrice repair improvements\u003c/li\u003e\n\u003cli\u003eFew new fields to Balance Sheet and Screener\u003c/li\u003e\n\u003cli\u003eMany little fixes\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFull changelog \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2935\"\u003e#2935\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThanks \u003ca href=\"https://github.com/foley40\"\u003e\u003ccode\u003e@​foley40\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/dokson\"\u003e\u003ccode\u003e@​dokson\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vignesh-nagarajan-vn\"\u003e\u003ccode\u003e@​vignesh-nagarajan-vn\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/shanehull\"\u003e\u003ccode\u003e@​shanehull\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/DogInfantry\"\u003e\u003ccode\u003e@​DogInfantry\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/Kaif10\"\u003e\u003ccode\u003e@​Kaif10\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/DMZ22\"\u003e\u003ccode\u003e@​DMZ22\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/Aaritp\"\u003e\u003ccode\u003e@​Aaritp\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/etbala\"\u003e\u003ccode\u003e@​etbala\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/aleks-drozy\"\u003e\u003ccode\u003e@​aleks-drozy\u003c/code\u003e\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/ranaroussi/yfinance/blob/main/CHANGELOG.rst\"\u003eyfinance's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.6.0\u003c/h2\u003e\n\u003cp\u003eFeatures / improvements\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd missing balance sheet keys: FixedMaturityInvestments, EquityInves… \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2879\"\u003e#2879\u003c/a\u003e \u003ca href=\"https://github.com/foley40\"\u003e\u003ccode\u003e@​foley40\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix: Screener: add dividendyield and dividendpershare.lasttwelvemonths \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2888\"\u003e#2888\u003c/a\u003e \u003ca href=\"https://github.com/shanehull\"\u003e\u003ccode\u003e@​shanehull\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't claim 'possibly delisted' when Yahoo explains the missing data \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2903\"\u003e#2903\u003c/a\u003e \u003ca href=\"https://github.com/vignesh-nagarajan-vn\"\u003e\u003ccode\u003e@​vignesh-nagarajan-vn\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix error messages showing internal 15m interval for 30m requests \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2900\"\u003e#2900\u003c/a\u003e \u003ca href=\"https://github.com/vignesh-nagarajan-vn\"\u003e\u003ccode\u003e@​vignesh-nagarajan-vn\u003c/code\u003e\u003c/a\u003e\nFixes:\u003c/li\u003e\n\u003cli\u003eFix generic-unit timedelta DeprecationWarning for sub-day intervals (\u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2882\"\u003e#2882\u003c/a\u003e) \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2891\"\u003e#2891\u003c/a\u003e \u003ca href=\"https://github.com/DogInfantry\"\u003e\u003ccode\u003e@​DogInfantry\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: read-only 'Adj Close' array crash in dividend-adjust repair \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2897\"\u003e#2897\u003c/a\u003e \u003ca href=\"https://github.com/Kaif10\"\u003e\u003ccode\u003e@​Kaif10\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AttributeError in Lookup error handling (self.ticker -\u0026gt; self.query) \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2896\"\u003e#2896\u003c/a\u003e \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix: handle null result from Yahoo API in _fetch_info \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2906\"\u003e#2906\u003c/a\u003e \u003ca href=\"https://github.com/foley40\"\u003e\u003ccode\u003e@​foley40\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix multi-day interval TypeError and actually silence the numpy\u0026gt;=2.5 Timedelta warning \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2915\"\u003e#2915\u003c/a\u003e \u003ca href=\"https://github.com/DMZ22\"\u003e\u003ccode\u003e@​DMZ22\u003c/code\u003e\u003c/a\u003e\nPrice repair:\u003c/li\u003e\n\u003cli\u003ePrice repair fixes \u0026amp; improvements \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2908\"\u003e#2908\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix: repair=True should not permanently convert GBp/ZAc/ILA prices to main currency \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2907\"\u003e#2907\u003c/a\u003e \u003ca href=\"https://github.com/foley40\"\u003e\u003ccode\u003e@​foley40\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrice repair improvements \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2943\"\u003e#2943\u003c/a\u003e\nDocs / maintenance\u003c/li\u003e\n\u003cli\u003eFix pandas 3 timezone assertion in test_download_multi_small_interval \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2901\"\u003e#2901\u003c/a\u003e \u003ca href=\"https://github.com/vignesh-nagarajan-vn\"\u003e\u003ccode\u003e@​vignesh-nagarajan-vn\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix grammar and formatting in advanced documentation \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2909\"\u003e#2909\u003c/a\u003e \u003ca href=\"https://github.com/Aaritp\"\u003e\u003ccode\u003e@​Aaritp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRe-enable test_no_expensive_calls_introduced without requests_cache \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2911\"\u003e#2911\u003c/a\u003e \u003ca href=\"https://github.com/dokson\"\u003e\u003ccode\u003e@​dokson\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin ruff ruleset for deterministic CI \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2919\"\u003e#2919\u003c/a\u003e \u003ca href=\"https://github.com/dokson\"\u003e\u003ccode\u003e@​dokson\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate packaging to pyproject.toml \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2920\"\u003e#2920\u003c/a\u003e \u003ca href=\"https://github.com/dokson\"\u003e\u003ccode\u003e@​dokson\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix: NaN equality comparison  \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2933\"\u003e#2933\u003c/a\u003e \u003ca href=\"https://github.com/foley40\"\u003e\u003ccode\u003e@​foley40\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate to pyproject.toml \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2849\"\u003e#2849\u003c/a\u003e \u003ca href=\"https://github.com/etbala\"\u003e\u003ccode\u003e@​etbala\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: state download()'s actual returned index timezone contract \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2936\"\u003e#2936\u003c/a\u003e \u003ca href=\"https://github.com/aleks-drozy\"\u003e\u003ccode\u003e@​aleks-drozy\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/ranaroussi/yfinance/commit/93eb4c234acc7d0cf9d176e602b8443179546253\"\u003e\u003ccode\u003e93eb4c2\u003c/code\u003e\u003c/a\u003e Update GH actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/0af231f6a47eee5e773290830d228de0c20d5ee1\"\u003e\u003ccode\u003e0af231f\u003c/code\u003e\u003c/a\u003e Version 1.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/777dc546a2464ae1f8716fd1991da157d251575c\"\u003e\u003ccode\u003e777dc54\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2935\"\u003e#2935\u003c/a\u003e from ranaroussi/dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/9b3fcbcd1a43481611c04daf990e2032275306a5\"\u003e\u003ccode\u003e9b3fcbc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2943\"\u003e#2943\u003c/a\u003e from ranaroussi/price-repair-improvements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/8b85f90ff92d6f90c5f31fca4cb21235dfadbfc9\"\u003e\u003ccode\u003e8b85f90\u003c/code\u003e\u003c/a\u003e Price repair improvements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/f85430919a8c6f1876e35931aee529ed8ecf8f98\"\u003e\u003ccode\u003ef854309\u003c/code\u003e\u003c/a\u003e Fix regression in PR \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2907\"\u003e#2907\u003c/a\u003e (see last comment)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/984a687ac18fb864ffd3cd99b953a47e406d256d\"\u003e\u003ccode\u003e984a687\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2936\"\u003e#2936\u003c/a\u003e from aleks-drozy/docs/download-tz-contract\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/24ee2ff842515d730cac56c847a155981f7c03fe\"\u003e\u003ccode\u003e24ee2ff\u003c/code\u003e\u003c/a\u003e docs: state download()'s actual returned index timezone contract\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/d611015d485bee175bede120d6638066fef12d05\"\u003e\u003ccode\u003ed611015\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2915\"\u003e#2915\u003c/a\u003e from DMZ22/fix-timedelta-deprecations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ranaroussi/yfinance/commit/61780c70e9bf1a8cb896e7ebdf48d22e9679545a\"\u003e\u003ccode\u003e61780c7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/ranaroussi/yfinance/issues/2849\"\u003e#2849\u003c/a\u003e from etbala/dependency-management\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ranaroussi/yfinance/compare/1.5.2...1.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.2 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.2...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.7 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/summ...\n\n_Description has been truncated_","html_url":"https://github.com/santhoshkannan-dev/TradeLoom/pull/20","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/santhoshkannan-dev%2FTradeLoom/issues/20","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/20/packages"}},{"old_version":"6.0.6","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-24T02:47:58.000Z","version_change":"6.0.6 → 6.1.0","issue":{"uuid":"5230566016","node_id":"PR_kwDOTGLFX88AAAABAvqejw","number":27,"state":"closed","title":"build(deps): bump the python group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T02:47:04.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-24T02:47:58.000Z","updated_at":"2026-09-04T02:47:05.000Z","time_to_close":950346,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python","update_count":16,"packages":[{"name":"django","old_version":"6.0.6","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1","repository_url":"https://github.com/anymail/django-anymail"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"coverage","old_version":"7.14.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0"},{"name":"djlint","old_version":"1.39.4","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.20","new_version":"0.16.4","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.6` | `6.1` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.3` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.39.4` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.16.4` |\n\n\nUpdates `django` from 6.0.6 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.6...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\u003cbr /\u003e\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\u003cbr /\u003e\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\u003cbr /\u003e\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\u003cbr /\u003e\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\u003cbr /\u003e\nin Django's documentation for recommendations.\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.14.3 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.0 — 2026-07-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSince 7.14.0, reporting commands implicitly combine parallel data files. Now those commands have a new option \u003ccode\u003e--keep-combined\u003c/code\u003e to retain the data files after combining them instead of the default, which is to delete them. Finishes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2198\"\u003eissue 2198\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report would incorrectly count excluded functions as uncovered, as described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2205\"\u003eissue 2205\u003c/a\u003e. This is now fixed thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2206\"\u003eMartin Kuntz Jacobsen\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWhen running your program, coverage now correctly sets \u003ccode\u003eyourmodule.__spec__.loader\u003c/code\u003e as \u003ca href=\"\"\u003estrongly recommended\u003c/a\u003e, avoiding the deprecation warning described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2208\"\u003eissue 2208\u003c/a\u003e. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2209\"\u003eA5rocks\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: with Python 3.10, running with the \u003ccode\u003e-I\u003c/code\u003e (isolated mode) option didn’t correctly omit the current directory from the module search path, as described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2103\"\u003eissue 2103\u003c/a\u003e. That is now fixed thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2211\"\u003eIlia Sorokin\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.0\"\u003ecoverage 7.15.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.0\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically\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/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.3...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.6 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.6...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djlint` from 1.39.4 to 1.44.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/djlint/djLint/releases\"\u003edjlint's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.44.2\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eH037\u003c/code\u003e no longer reports two attributes whose names differ only before a \u003ccode\u003e.\u003c/code\u003e as duplicates (\u003ccode\u003edata-a.checked\u003c/code\u003e and \u003ccode\u003edata-b.checked\u003c/code\u003e, or alpine's \u003ccode\u003ex-on:click.prevent\u003c/code\u003e and \u003ccode\u003ex-on:keyup.prevent\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAn attribute whose name merely ends in the name a rule looks for is no longer mistaken for it. \u003ccode\u003edata-alt\u003c/code\u003e and \u003ccode\u003edata-x.alt\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent on an image with no \u003ccode\u003ealt\u003c/code\u003e, \u003ccode\u003edata-lang\u003c/code\u003e and \u003ccode\u003exml:lang\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, \u003ccode\u003edata-height\u003c/code\u003e and \u003ccode\u003edata-width\u003c/code\u003e silenced \u003ccode\u003eH006\u003c/code\u003e, \u003ccode\u003edata-name=\u0026quot;description\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH030\u003c/code\u003e and \u003ccode\u003edata-name=\u0026quot;keywords\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH031\u003c/code\u003e, a...\n\n_Description has been truncated_","html_url":"https://github.com/Ahmed-Abdelgawad-Dev/hotelx/pull/27","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahmed-Abdelgawad-Dev%2Fhotelx/issues/27","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/27/packages"}},{"old_version":"6.0.7","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-21T23:38:18.000Z","version_change":"6.0.7 → 6.1.0","issue":{"uuid":"5219007422","node_id":"PR_kwDOTs1Bhs8AAAABAnD6VA","number":15,"state":"closed","title":"Bump the python group across 1 directory with 15 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-03T23:38:00.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T23:38:18.000Z","updated_at":"2026-09-03T23:38:02.000Z","time_to_close":1123182,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":15,"packages":[{"name":"django","old_version":"6.0.7","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"coverage","old_version":"7.15.2","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djangorestframework-stubs","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.43.1","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.1","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 15 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.7` | `6.1` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.2` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.1` | `3.18.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.43.1` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.1` | `0.16.3` |\n\n\nUpdates `django` from 6.0.7 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.7...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.2 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.2...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.7 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.7...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field\u003c/code\u003e corrupting concatenated keys (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/02a46831ceb213421761f312e1368fa7b7e796d9\"\u003e\u003ccode\u003e02a4683\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etestcase_databases\u003c/code\u003e mapping of \u003ccode\u003emulti_db = False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/bc85eb958b63b752cbd7454d6378e51ca50d891d\"\u003e\u003ccode\u003ebc85eb9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_decorators\u003c/code\u003e hoisting values above their definitions (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/4eb5abf3734ba10c96dd53abdf98e50c78c4adae\"\u003e\u003ccode\u003e4eb5abf\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_register\u003c/code\u003e referencing models defined after the admin class (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d782084a4fe43286d6b4b2d11676efad0a1356cb\"\u003e\u003ccode\u003ed782084\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003esettings_storages\u003c/code\u003e erasing settings referenced elsewhere (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/2f3eb7571f87ae8c62389ac8f977935f81fbe58e\"\u003e\u003ccode\u003e2f3eb75\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etest_http_headers\u003c/code\u003e precedence when merging into \u003ccode\u003eheaders=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d750615a98098ff0c44477041932a04089d5aa47\"\u003e\u003ccode\u003ed750615\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003estringagg\u003c/code\u003e moving import despite bare \u003ccode\u003eStringAgg\u003c/code\u003e references (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/49cb8b9c2297d329a8f858beb54fb34e7274830a\"\u003e\u003ccode\u003e49cb8b9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eutils_timezone\u003c/code\u003e matching aliased \u003ccode\u003eutc\u003c/code\u003e imports (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-upgrade/compare/1.31.1...1.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework-stubs` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/releases\"\u003edjangorestframework-stubs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThis is the first version to be based on DRF 3.18\u003c/li\u003e\n\u003cli\u003eThis is the last version to support \u003ccode\u003edjango-stubs\u003c/code\u003e 6.0.x - next release will require 6.1.x\u003c/li\u003e\n\u003cli\u003eThis is the last version to support Python 3.10 - following django-stubs upstream\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop obsolete coreapi/coreschema from stubs (removed in DRF 3.17) by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1025\"\u003etypeddjango/djangorestframework-stubs#1025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate stubs for djangorestframework 3.18.0 by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1030\"\u003etypeddjango/djangorestframework-stubs#1030\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eHousekeeping\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUnlock django-stubs dev dependency pinning in pyproject.toml by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1033\"\u003etypeddjango/djangorestframework-stubs#1033\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 3.18.0 release by \u003ca href=\"https://github.com/intgr\"\u003e\u003ccode\u003e@​intgr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/pull/1034\"\u003etypeddjango/djangorestframework-stubs#1034\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/compare/3.17.1...3.18.0\"\u003ehttps://github.com/typeddjango/djangorestframework-stubs/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/18a30a10d0f0f6811fbd52c27a68d5a0396ae3bb\"\u003e\u003ccode\u003e18a30a1\u003c/code\u003e\u003c/a\u003e Version 3.18.0 release (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/31c54035164fd91bc60cb384519ed34bf255e8fa\"\u003e\u003ccode\u003e31c5403\u003c/code\u003e\u003c/a\u003e Update stubs for djangorestframework 3.18.0 (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1030\"\u003e#1030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/40522032009bc3fb8914b5858ffc62979969c4d8\"\u003e\u003ccode\u003e4052203\u003c/code\u003e\u003c/a\u003e Unlock django-stubs pinning in pyproject.toml (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1033\"\u003e#1033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/ebb2bcc45fcdf9304d85efc7e8b2f477c4482b95\"\u003e\u003ccode\u003eebb2bcc\u003c/code\u003e\u003c/a\u003e Update astral-sh/setup-uv action to v10 (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1031\"\u003e#1031\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/c34d9bb79ada9af7293302c7fcb66ff344a56b69\"\u003e\u003ccode\u003ec34d9bb\u003c/code\u003e\u003c/a\u003e Update dependency django to ==6.1.* (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1023\"\u003e#1023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/762c2d1de8722c640b18afbc4dbf1b3423bd2b5b\"\u003e\u003ccode\u003e762c2d1\u003c/code\u003e\u003c/a\u003e Lock file maintenance (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1028\"\u003e#1028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/135195b6d8d52b3c833c65d010df8b4be5fae4ea\"\u003e\u003ccode\u003e135195b\u003c/code\u003e\u003c/a\u003e Update dependency pre-commit to v4.6.2 (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1027\"\u003e#1027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/41decd6d3de29391fd2aed96aa7750dab572bf40\"\u003e\u003ccode\u003e41decd6\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1026\"\u003e#1026\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/f5ced24033de0cd0ae75c8f3bbe76753ed2527d4\"\u003e\u003ccode\u003ef5ced24\u003c/code\u003e\u003c/a\u003e Remove coreapi/coreschema from stubs (DRF 3.17+) (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1025\"\u003e#1025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/commit/b7ef8fb3a3654cb40f6352f0514050b3ed5a941b\"\u003e\u003ccode\u003eb7ef8fb\u003c/code\u003e\u003c/a\u003e Update dependency djangorestframework to v3.18.0 \u0026amp; create new allowlist (\u003ca href=\"https://redirect.github.com/typeddjango/djangorestframework-stubs/issues/1024\"\u003e#1024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/djangorestframework-stubs/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djlint` from 1.43.1 to 1.44.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/djlint/djLint/releases\"\u003edjlint's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.44.2\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eH037\u003c/code\u003e no longer reports two attributes whose names differ only before a \u003ccode\u003e.\u003c/code\u003e as duplicates (\u003ccode\u003edata-a.checked\u003c/code\u003e and \u003ccode\u003edata-b.checked\u003c/code\u003e, or alpine's \u003ccode\u003ex-on:click.prevent\u003c/code\u003e and \u003ccode\u003ex-on:keyup.prevent\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAn attribute whose name merely ends in the name a rule looks for is no longer mistaken for it. \u003ccode\u003edata-alt\u003c/code\u003e and \u003ccode\u003edata-x.alt\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent on an image with no \u003ccode\u003ealt\u003c/code\u003e, \u003ccode\u003edata-lang\u003c/code\u003e and \u003ccode\u003exml:lang\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, \u003ccode\u003edata-height\u003c/code\u003e and \u003ccode\u003edata-width\u003c/code\u003e silenced \u003ccode\u003eH006\u003c/code\u003e, \u003ccode\u003edata-name=\u0026quot;description\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH030\u003c/code\u003e and \u003ccode\u003edata-name=\u0026quot;keywords\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH031\u003c/code\u003e, and \u003ccode\u003edata-x.id\u003c/code\u003e satisfied a \u003ccode\u003e\u0026lt;label for\u0026gt;\u003c/code\u003e for \u003ccode\u003eH042\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eA name written inside an attribute value is no longer read as an attribute. \u003ccode\u003etitle=\u0026quot;alt=x\u0026quot;\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent, \u003ccode\u003eclass=\u0026quot;language-en\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, and \u003ccode\u003etitle=\u0026quot;the ID=5\u0026quot;\u003c/code\u003e was reported by \u003ccode\u003eH010\u003c/code\u003e as an uppercase attribute name.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eH005\u003c/code\u003e no longer reports a tag whose name only starts with \u003ccode\u003ehtml\u003c/code\u003e, such as \u003ccode\u003e\u0026lt;htmlx\u0026gt;\u003c/code\u003e, and points at the \u003ccode\u003e\u0026lt;html\u0026gt;\u003c/code\u003e tag itself rather than at everything up to the last \u003ccode\u003e\u0026gt;\u003c/code\u003e in the file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.44.1\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFormatting no longer changes what the page renders. A space that shows was dropped (\u003ccode\u003e\u0026lt;span\u0026gt;a\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt; b \u0026lt;/span\u0026gt;\u003c/code\u003e rendered as \u003ccode\u003eab\u003c/code\u003e, \u003ccode\u003ea{% if x %} b {% endif %}c\u003c/code\u003e as \u003ccode\u003eabc\u003c/code\u003e), a space that shows nothing was added (\u003ccode\u003e\u0026lt;span\u0026gt;     \u0026lt;/span\u0026gt;\u003c/code\u003e became \u003ccode\u003e\u0026lt;span\u0026gt; \u0026lt;/span\u0026gt;\u003c/code\u003e), and moving a tag onto its own line could add one (\u003ccode\u003ex\u0026lt;img\u0026gt;y\u003c/code\u003e, or across a comment as in \u003ccode\u003ea{# c #}\u0026lt;img\u0026gt;\u003c/code\u003e). Whitespace is now kept where it renders and dropped where it does not.\u003c/li\u003e\n\u003cli\u003eA line break inside an attribute value is kept, so a \u003ccode\u003etitle\u003c/code\u003e tooltip no longer loses a line and a \u003ccode\u003edata-\u003c/code\u003e value read by script no longer comes back different. Line breaks in \u003ccode\u003eclass\u003c/code\u003e, \u003ccode\u003estyle\u003c/code\u003e, \u003ccode\u003esrcset\u003c/code\u003e and \u003ccode\u003esizes\u003c/code\u003e mean nothing and are still joined.\u003c/li\u003e\n\u003cli\u003eIndentation inside \u003ccode\u003e\u0026lt;pre\u0026gt;\u003c/code\u003e and \u003ccode\u003e\u0026lt;textarea\u0026gt;\u003c/code\u003e is left alone when the closing tag has something after it on its line (\u003ccode\u003e\u0026lt;pre\u0026gt;  a\\n  b\u0026lt;/pre\u0026gt; tail\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eWhitespace css does not collapse, such as U+2005, is text, and is no longer stripped from the edges of an element or of the file.\u003c/li\u003e\n\u003cli\u003eTwo indenting fixes: a line that closes one tag and opens another (\u003ccode\u003e\u0026lt;/b\u0026gt;\u0026lt;i\u0026gt;\u003c/code\u003e) indents its contents again, and a line that closes more tags than it opens unindents even when a whole tag ends it (\u003ccode\u003e\u0026lt;/b\u0026gt;\u0026lt;small\u0026gt;\u0026lt;/small\u0026gt;\u003c/code\u003e). Both left the lines after them at the wrong level.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--line-break-after-multiline-tag\u003c/code\u003e now applies only to tags actually written over several lines, as its help says. It was holding back the content of every element, splitting tags that fit on one line.\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003eclass\u003c/code\u003e value is tidied wherever it was written: \u003ccode\u003eclass=\u0026quot; a  b \u0026quot;\u003c/code\u003e becomes \u003ccode\u003eclass=\u0026quot;a b\u0026quot;\u003c/code\u003e. A tag whose attribute value holds a line break is spread over lines, since it cannot fit on one.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.44.0\u003c/h2\u003e\n\u003ch3\u003eFeature\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003e--allow-empty-input\u003c/code\u003e option, and the matching \u003ccode\u003eallow_empty_input\u003c/code\u003e config key, exits \u003ccode\u003e0\u003c/code\u003e instead o...\n\n_Description has been truncated_","html_url":"https://github.com/kathalsahab/expense_tracker/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/kathalsahab%2Fexpense_tracker/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"6.0.7","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-21T23:38:14.000Z","version_change":"6.0.7 → 6.1.0","issue":{"uuid":"5219007183","node_id":"PR_kwDOT1AmwM8AAAABAnD5iQ","number":10,"state":"closed","title":"Bump the python group across 1 directory with 14 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-03T23:37:38.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T23:38:14.000Z","updated_at":"2026-09-03T23:37:40.000Z","time_to_close":1123164,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":14,"packages":[{"name":"django","old_version":"6.0.8","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"sentry-sdk","old_version":"2.66.1","new_version":"2.68.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"coverage","old_version":"7.15.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djlint","old_version":"1.43.2","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.1","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 14 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.8` | `6.1` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.66.1` | `2.68.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.3` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.43.2` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.1` | `0.16.3` |\n\n\nUpdates `django` from 6.0.8 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.8...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.66.1 to 2.68.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=True),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using it to gate usages of the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, you'll need to remove the calls entirely or define a \u003ccode\u003ebefore_send_log\u003c/code\u003e callback to filter out unwanted logs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you has \u003ccode\u003eenable_metrics\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAny metrics emitted using the metrics API will be emitted. You'll need to drop them in a \u003ccode\u003ebefore_send_metric\u003c/code\u003e or remove the calls to the API.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eWhy We're Doing This\u003c/h3\u003e\n\u003cp\u003eWe recognize this is a disruptive change for some folks and want to make it clear this is a one-off. We're removing the options because they were an unnecessary hurdle that one had to jump through to be able to use logs and metrics, and it was confusing why the logging API would not just work on its own. On the other hand, we wanted to give you more fine-grained control over automatic collection.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet the segment source on the scope for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7163\"\u003e#7163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove early return for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e in \u003ccode\u003eset_transaction_name()\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7164\"\u003e#7164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet the segment name on the scope with \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7162\"\u003e#7162\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(batcher) Add global flush trigger based on the span number by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7150\"\u003e#7150\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\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/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=True),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using it to gate usages of the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, you'll need to remove the calls entirely or define a \u003ccode\u003ebefore_send_log\u003c/code\u003e callback to filter out unwanted logs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you has \u003ccode\u003eenable_metrics\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAny metrics emitted using the metrics API will be emitted. You'll need to drop them in a \u003ccode\u003ebefore_send_metric\u003c/code\u003e or remove the calls to the API.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eWhy We're Doing This\u003c/h3\u003e\n\u003cp\u003eWe recognize this is a disruptive change for some folks and want to make it clear this is a one-off. We're removing the options because they were an unnecessary hurdle that one had to jump through to be able to use logs and metrics, and it was confusing why the logging API would not just work on its own. On the other hand, we wanted to give you more fine-grained control over automatic collection.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet the segment source on the scope for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7163\"\u003e#7163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove early return for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e in \u003ccode\u003eset_transaction_name()\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7164\"\u003e#7164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet the segment name on the scope with \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7162\"\u003e#7162\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(batcher) Add global flush trigger based on the span number by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7150\"\u003e#7150\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/getsentry/sentry-python/commit/c819e660c623b41b881349a7c7b3d9d2b94b157a\"\u003e\u003ccode\u003ec819e66\u003c/code\u003e\u003c/a\u003e Update README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/90446df489044416d92bb392cff17a8ddc863b01\"\u003e\u003ccode\u003e90446df\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/cb2499cf743298f8bbde0662e62f42d6a0c12514\"\u003e\u003ccode\u003ecb2499c\u003c/code\u003e\u003c/a\u003e release: 2.68.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/1c3b50d1cc5996249552b1808a77eeb3ad28e138\"\u003e\u003ccode\u003e1c3b50d\u003c/code\u003e\u003c/a\u003e ref: Flush trace buckets when segment spans finish (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7170\"\u003e#7170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/c200bdfb297dd83599f5fab5c693c463e7148e19\"\u003e\u003ccode\u003ec200bdf\u003c/code\u003e\u003c/a\u003e test(django): Remove dead code and stale markers from the Django test suite (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/4e4ea83b4fafaae3d53e68d756c55c74fee37545\"\u003e\u003ccode\u003e4e4ea83\u003c/code\u003e\u003c/a\u003e ref(boto3): Move crumbs to integration (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7165\"\u003e#7165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/0f0cd1fe65eeba9801077fd96dfe6e736dde11c2\"\u003e\u003ccode\u003e0f0cd1f\u003c/code\u003e\u003c/a\u003e ref(stdlib): Move crumbs to integration (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7161\"\u003e#7161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/2fef9bce3cd58d7f2993bb2d1c7169845e154c81\"\u003e\u003ccode\u003e2fef9bc\u003c/code\u003e\u003c/a\u003e chore: Make \u003ccode\u003eenable_logs\u003c/code\u003e, \u003ccode\u003eenable_metrics\u003c/code\u003e no-op (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7177\"\u003e#7177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/81777391339ed248a167f6e1aff1cb0df088cfc9\"\u003e\u003ccode\u003e8177739\u003c/code\u003e\u003c/a\u003e ref(httpx,httpx2): Move crumbs to integrations (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7149\"\u003e#7149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e4d7398fb7769c5853ad6ae9c80696192ce83982\"\u003e\u003ccode\u003ee4d7398\u003c/code\u003e\u003c/a\u003e ref(pyreqwest): Move crumbs to integration (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7148\"\u003e#7148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.66.1...2.68.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.3 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.3...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.7 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.7...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field\u003c/code\u003e corrupting concatenated keys (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/02a46831ceb213421761f312e1368fa7b7e796d9\"\u003e\u003ccode\u003e02a4683\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etestcase_databases\u003c/code\u003e mapping of \u003ccode\u003emulti_db = False\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/727\"\u003e#727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/bc85eb958b63b752cbd7454d6378e51ca50d891d\"\u003e\u003ccode\u003ebc85eb9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_decorators\u003c/code\u003e hoisting values above their definitions (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/4eb5abf3734ba10c96dd53abdf98e50c78c4adae\"\u003e\u003ccode\u003e4eb5abf\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eadmin_register\u003c/code\u003e referencing models defined after the admin class (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d782084a4fe43286d6b4b2d11676efad0a1356cb\"\u003e\u003ccode\u003ed782084\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003esettings_storages\u003c/code\u003e erasing settings referenced elsewhere (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/724\"\u003e#724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/2f3eb7571f87ae8c62389ac8f977935f81fbe58e\"\u003e\u003ccode\u003e2f3eb75\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003etest_http_headers\u003c/code\u003e precedence when merging into \u003ccode\u003eheaders=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/723\"\u003e#723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/d750615a98098ff0c44477041932a04089d5aa47\"\u003e\u003ccode\u003ed750615\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003estringagg\u003c/code\u003e moving import despite bare \u003ccode\u003eStringAgg\u003c/code\u003e references (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/722\"\u003e#722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/49cb8b9c2297d329a8f858beb54fb34e7274830a\"\u003e\u003ccode\u003e49cb8b9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eutils_timezone\u003c/code\u003e matching aliased \u003ccode\u003eutc\u003c/code\u003e imports (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/720\"\u003e#720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/adamchainz/django-upgrade/compare/1.31.1...1.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djlint` from 1.43.2 to 1.44.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/djlint/djLint/releases\"\u003edjlint's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.44.2\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eH037\u003c/code\u003e no longer reports two attributes whose names differ only before a \u003ccode\u003e.\u003c/code\u003e as duplicates (\u003ccode\u003edata-a.checked\u003c/code\u003e and \u003ccode\u003edata-b.checked\u003c/code\u003e, or alpine's \u003ccode\u003ex-on:click.prevent\u003c/code\u003e and \u003ccode\u003ex-on:keyup.prevent\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAn attribute whose name merely ends in the name a rule looks for is no longer mistaken for it. \u003ccode\u003edata-alt\u003c/code\u003e and \u003ccode\u003edata-x.alt\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent on an image with no \u003ccode\u003ealt\u003c/code\u003e, \u003ccode\u003edata-lang\u003c/code\u003e and \u003ccode\u003exml:lang\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, \u003ccode\u003edata-height\u003c/code\u003e and \u003ccode\u003edata-width\u003c/code\u003e silenced \u003ccode\u003eH006\u003c/code\u003e, \u003ccode\u003edata-name=\u0026quot;description\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH030\u003c/code\u003e and \u003ccode\u003edata-name=\u0026quot;keywords\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH031\u003c/code\u003e, and \u003ccode\u003edata-x.id\u003c/code\u003e satisfied a \u003ccode\u003e\u0026lt;label for\u0026gt;\u003c/code\u003e for \u003ccode\u003eH042\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eA name written inside an attribute value is no longer read as an attribute. \u003ccode\u003etitle=\u0026quot;alt=x\u0026quot;\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent, \u003ccode\u003eclass=\u0026quot;language-en\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, and \u003ccode\u003etitle=\u0026quot;the ID=5\u0026quot;\u003c/code\u003e was reported by \u003ccode\u003eH010\u003c/code\u003e as an uppercase attribute name.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eH005\u003c/code\u003e no longer reports a tag whose name only starts with \u003ccode\u003ehtml\u003c/code\u003e, such as \u003ccode\u003e\u0026lt;htmlx\u0026gt;\u003c/code\u003e, and points at the \u003ccode\u003e\u0026lt;html\u0026gt;\u003c/code\u003e tag itself rather than at everything up to the last \u003ccode\u003e\u0026gt;\u003c/code\u003e in the file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.44.1\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFormatting no longer changes what the page renders. A space that shows was dropped (\u003ccode\u003e\u0026lt;span\u0026gt;a\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt; b \u0026lt;/span\u0026gt;\u003c/code\u003e rendered as \u003ccode\u003eab\u003c/code\u003e, \u003ccode\u003ea{% if x %} b {% endif %}c\u003c/code\u003e as \u003ccode\u003eabc\u003c/code\u003e), a space that shows nothing was added (\u003ccode\u003e\u0026lt;span\u0026gt;     \u0026lt;/span\u0026gt;\u003c/code\u003e became \u003ccode\u003e\u0026lt;span\u0026gt; \u0026lt;/span\u0026gt;\u003c/code\u003e), and moving a tag onto its own line could add one (\u003ccode\u003ex\u0026lt;img\u0026gt;y\u003c/code\u003e, or across a comment as in \u003ccode\u003ea{# c #}\u0026lt;img\u0026gt;\u003c/code\u003e). Whitespace is now kept where it renders and dropped where it does not.\u003c/li\u003e\n\u003cli\u003eA line break inside an attribute value is kept, so a \u003ccode\u003etitle\u003c/code\u003e tooltip no longer loses a line and a \u003ccode\u003edata-\u003c/code\u003e value read by script no longer comes back different. Line breaks in \u003ccode\u003eclass\u003c/code\u003e, \u003ccode\u003estyle\u003c/code\u003e, \u003ccode\u003esrcset\u003c/code\u003e and \u003ccode\u003esizes\u003c/code\u003e mean nothing and are still joined.\u003c/li\u003e\n\u003cli\u003eIndentation inside \u003ccode\u003e\u0026lt;pre\u0026gt;\u003c/code\u003e and \u003ccode\u003e\u0026lt;textarea\u0026gt;\u003c/code\u003e is left alone when the closing tag has something after it on its line (\u003ccode\u003e\u0026lt;pre\u0026gt;  a\\n  b\u0026lt;/pre\u0026gt; tail\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eWhitespace css does not collapse, such as U+2005, is text, and is no longer stripped from the edges of an element or of the file.\u003c/li\u003e\n\u003cli\u003eTwo indenting fixes: a line that closes one tag and opens another (\u003ccode\u003e\u0026lt;/b\u0026gt;\u0026lt;i\u0026gt;\u003c/code\u003e) indents its contents again, and a line that closes more tags than it opens unindents even when a whole tag ends it (\u003ccode\u003e\u0026lt;/b\u0026gt;\u0026lt;small\u0026gt;\u0026lt;/small\u0026gt;\u003c/code\u003e). Both left the lines after them at the wrong level.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--line-break-after-multiline-tag\u003c/code\u003e now applies only to tags actually written over several lines, as its help says. It was holding back the content of every element, splitting tags that fit on one line.\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003eclass\u003c/code\u003e value is tidied wherever it was written: \u003ccode\u003eclass=\u0026quot; a  b \u0026quot;\u003c/code\u003e becomes \u003ccode\u003eclass=\u0026quot;a b\u0026quot;\u003c/code\u003e. A tag whose attribute value holds a line break is spread over lines, since it cannot fit on one.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.44.0\u003c/h2\u003e\n\u003ch3\u003eFeature\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003e--allow-empty-input\u003c/code\u003e option, and the matching \u003ccode\u003eallow_empty_input\u003c/code\u003e config key, exits \u003ccode\u003e0\u003c/code\u003e instead of \u003ccode\u003e2\u003c/code\u003e when the given paths match no files.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAn html close tag inside an inline \u003ccode\u003e{% if %}...{% endif %}\u003c/code\u003e no longer dedents everything that follows it by one level, collapsing nested structures toward column 0 - a regression in 1.43.0. A close tag already at the content level of the template block it sits in is held there, but the level it was denied was then taken off the end of the line instead, so \u003ccode\u003e{% if r %}\u0026lt;/strong\u0026gt;{% endif %}\u003c/code\u003e moved the rest of the block left. The matching open tag never took a level to give back, since \u003ccode\u003e{% endif %}\u003c/code\u003e had already returned it.\u003c/li\u003e\n\u003cli\u003eA run where every file found was skipped by \u003ccode\u003eexclude\u003c/code\u003e, \u003ccode\u003eextend_exclude\u003c/code\u003e, \u003ccode\u003euse_gitignore\u003c/code\u003e or \u003ccode\u003erequire_pragma\u003c/code\u003e now exits \u003ccode\u003e0\u003c/code\u003e instead of \u003ccode\u003e1\u003c/code\u003e. Skipping them is the configuration doing its job, and it is what lets \u003ccode\u003eexclude\u003c/code\u003e work under pre-commit, which passes the names of every staged file. Paths that match no files at all now exit \u003ccode\u003e2\u003c/code\u003e rather than \u003ccode\u003e1\u003c/code\u003e, so exit \u003ccode\u003e1\u003c/code\u003e means only that djLint found something to report.\u003c/li\u003e\n\u003cli\u003eAn unhandled error exits \u003ccode\u003e2\u003c/code\u003e instead of \u003ccode\u003e1\u003c/code\u003e, so a crash is no longer indistinguishable from a lint error. The traceback is still printed.\u003c/li\u003e\n\u003cli\u003eAn unrecognized \u003ccode\u003e--profile\u003c/code\u003e, or \u003ccode\u003eprofile\u003c/code\u003e in a config file, is now a usage error. A typo used to lint with a silently different rule set and exit \u003ccode\u003e0\u003c/code\u003e, and raised \u003ccode\u003eKeyError\u003c/code\u003e with \u003ccode\u003e--require-pragma\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eA directory whose name matches the file extension (\u003ccode\u003ebuild.html/\u003c/code\u003e) is no longer picked up as a template and opened as a file, crashing the run.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eNo files to check!\u003c/code\u003e is written to stderr instead of stdout, where formatted code is written.\u003c/li\u003e\n\u003cli\u003eInput piped to \u003ccode\u003edjlint - --reformat\u003c/code\u003e that \u003ccode\u003e--require-pragma\u003c/code\u003e skips is handed back byte for byte instead of being replaced by \u003ccode\u003eNo files to check!\u003c/code\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/djlint/djLint/blob/master/CHANGELOG.md\"\u003edjlint's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.44.2] - 2026-08-08\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eH037\u003c/code\u003e no longer reports two attributes whose names differ only before a \u003ccode\u003e.\u003c/code\u003e as duplicates (\u003ccode\u003edata-a.checked\u003c/code\u003e and \u003ccode\u003edata-b.checked\u003c/code\u003e, or alpine's \u003ccode\u003ex-on:click.prevent\u003c/code\u003e and \u003ccode\u003ex-on:keyup.prevent\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAn attribute whose name merely ends in the name a rule looks for is no longer mistaken for it. \u003ccode\u003edata-alt\u003c/code\u003e and \u003ccode\u003edata-x.alt\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent on an image with no \u003ccode\u003ealt\u003c/code\u003e, \u003ccode\u003edata-lang\u003c/code\u003e and \u003ccode\u003exml:lang\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, \u003ccode\u003edata-height\u003c/code\u003e and \u003ccode\u003edata-width\u003c/code\u003e silenced \u003ccode\u003eH006\u003c/code\u003e, \u003ccode\u003edata-name=\u0026quot;description\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH030\u003c/code\u003e and \u003ccode\u003edata-name=\u0026quot;keywords\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH031\u003c/code\u003e, and \u003ccode\u003edata-x.id\u003c/code\u003e satisfied a \u003ccode\u003e\u0026lt;label for\u0026gt;\u003c/code\u003e for \u003ccode\u003eH042\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eA name written inside an attribute value is no longer read as an attribute. \u003ccode\u003etitle=\u0026quot;alt=x\u0026quot;\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent, \u003ccode\u003eclass=\u0026quot;language-en\u0026quot;\u003c/code\u003e silenced \u003ccode\u003eH005\u003c/code\u003e, and \u003ccode\u003etitle=\u0026quot;the ID=5\u0026quot;\u003c/code\u003e was reported by \u003ccode\u003eH010\u003c/code\u003e as an uppercase attribute name.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eH005\u003c/code\u003e no longer reports a tag whose name only starts with \u003ccode\u003ehtml\u003c/code\u003e, such as \u003ccode\u003e\u0026lt;htmlx\u0026gt;\u003c/code\u003e, and points at the \u003ccode\u003e\u0026lt;html\u0026gt;\u003c/code\u003e tag itself rather than at everything up to the last \u003ccode\u003e\u0026gt;\u003c/code\u003e in the file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.44.1] - 2026-08-07\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFormatting no longer changes what the page renders. A space that shows was dropped (\u003ccode\u003e\u0026lt;span\u0026gt;a\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt; b \u0026lt;/span\u0026gt;\u003c/code\u003e rendered as \u003ccode\u003eab\u003c/code\u003e, \u003ccode\u003ea{% if x %} b {% endif %}c\u003c/code\u003e as \u003ccode\u003eabc\u003c/code\u003e), a space that shows nothing was added (\u003ccode\u003e\u0026lt;span\u0026gt;     \u0026lt;/span\u0026gt;\u003c/code\u003e became \u003ccode\u003e\u0026lt;span\u0026gt; \u0026lt;/span\u0026gt;\u003c/code\u003e), and moving a tag onto its own line could add one (\u003ccode\u003ex\u0026lt;img\u0026gt;y\u003c/code\u003e, or across a comment as in \u003ccode\u003ea{# c #}\u0026lt;img\u0026gt;\u003c/code\u003e). Whitespace is now kept where it renders and dropped where it does not.\u003c/li\u003e\n\u003cli\u003eA line break inside an attribute value is kept, so a \u003ccode\u003etitle\u003c/code\u003e tooltip no longer loses a line and a \u003ccode\u003edata-\u003c/code\u003e value read by script no longer comes back different. Line breaks in \u003ccode\u003eclass\u003c/code\u003e, \u003ccode\u003estyle\u003c/code\u003e, \u003ccode\u003esrcset\u003c/code\u003e and \u003ccode\u003esizes\u003c/code\u003e mean nothing and are still joined.\u003c/li\u003e\n\u003cli\u003eIndentation inside \u003ccode\u003e\u0026lt;pre\u0026gt;\u003c/code\u003e and \u003ccode\u003e\u0026lt;textarea\u0026gt;\u003c/code\u003e is left alone when the closing tag has something after it on its line (\u003ccode\u003e\u0026lt;pre\u0026gt;  a\\n  b\u0026lt;/pre\u0026gt; tail\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eWhitespace css does not collapse, such as U+2005, is text, and is no longer stripped from the edges of an element or of the file.\u003c/li\u003e\n\u003cli\u003eTwo indenting fixes: a line that closes one tag and opens another (\u003ccode\u003e\u0026lt;/b\u0026gt;\u0026lt;i\u0026gt;\u003c/code\u003e) indents its contents again, and a line that closes more tags than it opens unindents even when a whole tag ends it (\u003ccode\u003e\u0026lt;/b\u0026gt;\u0026lt;small\u0026gt;\u0026lt;/small\u0026gt;\u003c/code\u003e). Both left the lines after them at the wrong level.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--line-break-after-multiline-tag\u003c/code\u003e now applies only to tags actually written over several lines, as its help says. It was holding back the content of every element, splitting tags that fit on one line.\u003c/li\u003e\n\u003cli\u003eA \u003ccode\u003eclass\u003c/code\u003e value is tidied wherever it was written: \u003ccode\u003eclass=\u0026quot; a  b \u0026quot;\u003c/code\u003e becomes \u003ccode\u003eclass=\u0026quot;a b\u0026quot;\u003c/code\u003e. A tag whose attribute value holds a line break is spread over lines, since it cannot fit on one.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.44.0] - 2026-08-04\u003c/h2\u003e\n\u003ch3\u003eFeature\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNew \u003ccode\u003e--allow-empty-input\u003c/code\u003e option, and the matching \u003ccode\u003eallow_empty_input\u003c/code\u003e config key, exits \u003ccode\u003e0\u003c/code\u003e instead of \u003ccode\u003e2\u003c/code\u003e when the given paths match no files.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAn html close tag inside an inline \u003ccode\u003e{% if %}...{% endif %}\u003c/code\u003e no longer dedents everything that follows it by one level, collapsing nested structures toward column 0 - a regression in 1.43.0. A close tag already at the content level of the template block it sits in is held there, but the level it was denied was then taken off the end of the line instead, so \u003ccode\u003e{% if r %}\u0026lt;/strong\u0026gt;{% endif %}\u003c/code\u003e moved the rest of the block left. The matching open tag never took a level to give back, since \u003ccode\u003e{% endif %}\u003c/code\u003e had already returned it.\u003c/li\u003e\n\u003cli\u003eA run where every file found was skipped by \u003ccode\u003eexclude\u003c/code\u003e, \u003ccode\u003eextend_exclude\u003c/code\u003e, \u003ccode\u003euse_gitignore\u003c/code\u003e or \u003ccode\u003erequire_pragma\u003c/code\u003e now exits \u003ccode\u003e0\u003c/code\u003e instead of \u003ccode\u003e1\u003c/code\u003e. Skipping them is the configuration doing its job, and it is what lets \u003ccode\u003eexclude\u003c/code\u003e work under pre-commit, which passes the names of every staged file. Paths that match no files at all now exit \u003ccode\u003e2\u003c/code\u003e rather than \u003ccode\u003e1\u003c/code\u003e, so exit \u003ccode\u003e1\u003c/code\u003e means only that djLint found something to report.\u003c/li\u003e\n\u003cli\u003eAn unhandled error exits \u003ccode\u003e2\u003c/code\u003e instead of \u003ccode\u003e1\u003c/code\u003e, so a crash is no longer indistinguishable from a lint error. The traceback is still printed.\u003c/li\u003e\n\u003cli\u003eAn unrecognized \u003ccode\u003e--profile\u003c/code\u003e, or \u003ccode\u003eprofile\u003c/code\u003e in a config file, is now a usage error. A typo used to lint with a silently different rule set and exit \u003ccode\u003e0\u003c/code\u003e, and raised \u003ccode\u003eKeyError\u003c/code\u003e with \u003ccode\u003e--require-pragma\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eA directory whose name matches the file extension (\u003ccode\u003ebuild.html/\u003c/code\u003e) is no longer picked up as a template and opened as a file, crashing the run.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eNo files to check!\u003c/code\u003e is written to stderr instead of stdout, where formatted code is written.\u003c/li\u003e\n\u003cli\u003eInput piped to \u003ccode\u003edjlint - --reformat\u003c/code\u003e that \u003ccode\u003e--require-pragma\u003c/code\u003e skips is handed back byte for byte instead of being replaced by \u003ccode\u003eNo files to check!\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/djlint/djLint/commit/76675b68608b5643655650bf461b7d2abb2e2a52\"\u003e\u003ccode\u003e76675b6\u003c/code\u003e\u003c/a\u003e v1.44.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/djlint/djLint/commit/c6016b29a84db3780c06af1badeeca50ac4147d4\"\u003e\u003ccode\u003ec6016b2\u003c/code\u003e\u003c/a\u003e fix(linter): don't read an attribute name from the middle in H037\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/djlint/djLint/commit/9de6448dc82cadcf56c21f05d4d5a99ab507445f\"\u003e\u003ccode\u003e9de6448\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/djlint/djLint/issues/2351\"\u003e#2351\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/djlint/djLint/commit/e7d505623042316be63009080d6222ea78b8943c\"\u003e\u003ccode\u003ee7d5056\u003c/code\u003e\u003c/a\u003e chore(deps): update dependency cssnano to v8.0.3 (\u003ca href=\"https://redirect.githu...\n\n_Description has been truncated_","html_url":"https://github.com/binittasaji2003-dot/HMS/pull/10","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/binittasaji2003-dot%2FHMS/issues/10","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/10/packages"}},{"old_version":"6.0.6","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-21T21:38:05.000Z","version_change":"6.0.6 → 6.1.0","issue":{"uuid":"5218374863","node_id":"PR_kwDOTZlw5c8AAAABAmkJ8A","number":23,"state":"closed","title":"Bump the python group across 1 directory with 19 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T21:40:01.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T21:38:05.000Z","updated_at":"2026-09-04T21:40:03.000Z","time_to_close":1209716,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":19,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"sentry-sdk","old_version":"2.64.0","new_version":"2.68.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"strawberry-graphql-django","old_version":"0.86.4","new_version":"0.87.0","repository_url":"https://github.com/strawberry-graphql/strawberry-django"},{"name":"uvicorn","old_version":"0.49.0","new_version":"0.52.3"},{"name":"coverage","old_version":"7.14.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0"},{"name":"djlint","old_version":"1.40.1","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.20","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 19 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail[brevo]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.64.0` | `2.68.0` |\n| [strawberry-graphql-django](https://github.com/strawberry-graphql/strawberry-django) | `0.86.4` | `0.87.0` |\n| [uvicorn[standard]](https://github.com/Kludex/uvicorn) | `0.49.0` | `0.52.3` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.3` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.40.1` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.16.3` |\n\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[brevo]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[brevo]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[brevo]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.64.0 to 2.68.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=True),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using it to gate usages of the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, you'll need to remove the calls entirely or define a \u003ccode\u003ebefore_send_log\u003c/code\u003e callback to filter out unwanted logs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you has \u003ccode\u003eenable_metrics\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAny metrics emitted using the metrics API will be emitted. You'll need to drop them in a \u003ccode\u003ebefore_send_metric\u003c/code\u003e or remove the calls to the API.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eWhy We're Doing This\u003c/h3\u003e\n\u003cp\u003eWe recognize this is a disruptive change for some folks and want to make it clear this is a one-off. We're removing the options because they were an unnecessary hurdle that one had to jump through to be able to use logs and metrics, and it was confusing why the logging API would not just work on its own. On the other hand, we wanted to give you more fine-grained control over automatic collection.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet the segment source on the scope for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7163\"\u003e#7163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove early return for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e in \u003ccode\u003eset_transaction_name()\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7164\"\u003e#7164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet the segment name on the scope with \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7162\"\u003e#7162\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(batcher) Add global flush trigger based on the span number by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7150\"\u003e#7150\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\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/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.68.0\u003c/h2\u003e\n\u003ch3\u003eImportant\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eWe're making \u003ccode\u003eenable_logs\u003c/code\u003e and \u003ccode\u003eenable_metrics\u003c/code\u003e no-op with this release (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7177\"\u003e#7177\u003c/a\u003e), and they'll be dropped in the next major.\u003c/p\u003e\n\u003cp\u003ePreviously, \u003ccode\u003eenable_logs\u003c/code\u003e also controlled automatic logs collection from the logging and Loguru integrations. These integrations now get an integration-level \u003ccode\u003ecapture_sentry_logs\u003c/code\u003e boolean option to allow for more control over the auto-collection. These options are \u003ccode\u003eFalse\u003c/code\u003e by default, i.e., \u003cstrong\u003enothing is auto-collected without your explicit opt-in\u003c/strong\u003e.\u003c/p\u003e\n\u003ch4\u003eAction Needed\u003c/h4\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, no action necessary, the API will just work.\u003c/li\u003e\n\u003cli\u003eIf you were auto-collecting logs from either \u003ccode\u003eLoggingIntegration\u003c/code\u003e or \u003ccode\u003eLoguruIntegration\u003c/code\u003e, the auto-collection \u003cstrong\u003ewill be turned off in this release\u003c/strong\u003e. You can switch auto-collection on explicitly with:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.logging import LoggingIntegration\nfrom sentry_sdk.integrations.loguru import LoguruIntegration\n\u003cp\u003esentry_sdk.init(\u003cbr /\u003e\nintegrations=[\u003cbr /\u003e\nLoggingIntegration(capture_sentry_logs=True),\u003cbr /\u003e\nLoguruIntegration(capture_sentry_logs=True),\u003cbr /\u003e\n],\u003cbr /\u003e\n)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eIf you had \u003ccode\u003eenable_logs\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf you were using it to gate usages of the \u003ccode\u003esentry_sdk.logger.X\u003c/code\u003e API, you'll need to remove the calls entirely or define a \u003ccode\u003ebefore_send_log\u003c/code\u003e callback to filter out unwanted logs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you has \u003ccode\u003eenable_metrics\u003c/code\u003e set to \u003ccode\u003eFalse\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAny metrics emitted using the metrics API will be emitted. You'll need to drop them in a \u003ccode\u003ebefore_send_metric\u003c/code\u003e or remove the calls to the API.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eWhy We're Doing This\u003c/h3\u003e\n\u003cp\u003eWe recognize this is a disruptive change for some folks and want to make it clear this is a one-off. We're removing the options because they were an unnecessary hurdle that one had to jump through to be able to use logs and metrics, and it was confusing why the logging API would not just work on its own. On the other hand, we wanted to give you more fine-grained control over automatic collection.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet the segment source on the scope for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7163\"\u003e#7163\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove early return for \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e in \u003ccode\u003eset_transaction_name()\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7164\"\u003e#7164\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet the segment name on the scope with \u003ccode\u003eNoOpStreamedSpan\u003c/code\u003e by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7162\"\u003e#7162\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(batcher) Add global flush trigger based on the span number by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/7150\"\u003e#7150\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/getsentry/sentry-python/commit/c819e660c623b41b881349a7c7b3d9d2b94b157a\"\u003e\u003ccode\u003ec819e66\u003c/code\u003e\u003c/a\u003e Update README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/90446df489044416d92bb392cff17a8ddc863b01\"\u003e\u003ccode\u003e90446df\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/cb2499cf743298f8bbde0662e62f42d6a0c12514\"\u003e\u003ccode\u003ecb2499c\u003c/code\u003e\u003c/a\u003e release: 2.68.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/1c3b50d1cc5996249552b1808a77eeb3ad28e138\"\u003e\u003ccode\u003e1c3b50d\u003c/code\u003e\u003c/a\u003e ref: Flush trace buckets when segment spans finish (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7170\"\u003e#7170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/c200bdfb297dd83599f5fab5c693c463e7148e19\"\u003e\u003ccode\u003ec200bdf\u003c/code\u003e\u003c/a\u003e test(django): Remove dead code and stale markers from the Django test suite (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/4e4ea83b4fafaae3d53e68d756c55c74fee37545\"\u003e\u003ccode\u003e4e4ea83\u003c/code\u003e\u003c/a\u003e ref(boto3): Move crumbs to integration (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7165\"\u003e#7165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/0f0cd1fe65eeba9801077fd96dfe6e736dde11c2\"\u003e\u003ccode\u003e0f0cd1f\u003c/code\u003e\u003c/a\u003e ref(stdlib): Move crumbs to integration (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7161\"\u003e#7161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/2fef9bce3cd58d7f2993bb2d1c7169845e154c81\"\u003e\u003ccode\u003e2fef9bc\u003c/code\u003e\u003c/a\u003e chore: Make \u003ccode\u003eenable_logs\u003c/code\u003e, \u003ccode\u003eenable_metrics\u003c/code\u003e no-op (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7177\"\u003e#7177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/81777391339ed248a167f6e1aff1cb0df088cfc9\"\u003e\u003ccode\u003e8177739\u003c/code\u003e\u003c/a\u003e ref(httpx,httpx2): Move crumbs to integrations (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7149\"\u003e#7149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e4d7398fb7769c5853ad6ae9c80696192ce83982\"\u003e\u003ccode\u003ee4d7398\u003c/code\u003e\u003c/a\u003e ref(pyreqwest): Move crumbs to integration (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/7148\"\u003e#7148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.64.0...2.68.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `strawberry-graphql-django` from 0.86.4 to 0.87.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/releases\"\u003estrawberry-graphql-django's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.87.0\u003c/h2\u003e\n\u003cp\u003eResolve prefetch-optimized nested connections on the event loop instead of\npaying a \u003ccode\u003esync_to_async\u003c/code\u003e thread hop per parent node: the nested-connection\ndefault resolver, the queryset hook for prefetch-optimized querysets and\n\u003ccode\u003etotalCount\u003c/code\u003e served from the prefetched window annotation no longer touch\nthe database, so they no longer need a worker thread.\u003c/p\u003e\n\u003cp\u003eThis release was contributed by \u003ca href=\"https://github.com/rcybulski1122012\"\u003e\u003ccode\u003e@​rcybulski1122012\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/pull/932\"\u003estrawberry-graphql/strawberry-django#932\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAdditional contributors: \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.86.8\u003c/h2\u003e\n\u003cp\u003eThe built-in toolbar script is now compatible with django-debug-toolbar 7.0.0,\nwhich renders the toolbar inside a shadow DOM by default.\u003c/p\u003e\n\u003cp\u003ePreviously, all DOM queries targeted \u003ccode\u003e#djDebug\u003c/code\u003e directly on the document,\nwhich broke under shadow DOM isolation — \u003ccode\u003equerySelector\u003c/code\u003e cannot pierce a shadow\nboundary.\u003c/p\u003e\n\u003cp\u003eUsing a \u003ccode\u003egetDebugElement()\u003c/code\u003e helper that locates \u003ccode\u003e#djDebug\u003c/code\u003e via\nthe shadow root of its parent element (\u003ccode\u003e#djDebugRoot\u003c/code\u003e):\u003c/p\u003e\n\u003cpre lang=\"js\"\u003e\u003ccode\u003efunction getDebugElement() {\n  const root = document.getElementById(\u0026quot;djDebugRoot\u0026quot;);\n  if (root) {\n    return (root.shadowRoot || root).querySelector(\u0026quot;#djDebug\u0026quot;);\n  }\n  return document.getElementById(\u0026quot;djDebug\u0026quot;);\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThis also handles the \u003ccode\u003eUSE_SHADOW_DOM = False\u003c/code\u003e fallback gracefully, keeping\nbackward compatibility with older versions of the toolbar.\u003c/p\u003e\n\u003cp\u003eThis release was contributed by \u003ca href=\"https://github.com/daudln\"\u003e\u003ccode\u003e@​daudln\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/pull/926\"\u003estrawberry-graphql/strawberry-django#926\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAdditional contributors: \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/bellini666\"\u003e\u003ccode\u003e@​bellini666\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.86.7\u003c/h2\u003e\n\u003cp\u003eHonor the \u003ccode\u003eDEFAULT_PK_FIELD_NAME\u003c/code\u003e setting (and per-field \u003ccode\u003ekey_attr\u003c/code\u003e) when\nresolving existing instances in mutation inputs. Previously \u003ccode\u003e_parse_pk\u003c/code\u003e read the\ninput value under \u003ccode\u003ekey_attr\u003c/code\u003e but always looked the instance up by \u003ccode\u003epk=\u003c/code\u003e, so\nrelation inputs and bare-id updates that reference an object by a configured\nnon-pk field raised \u003ccode\u003eDoesNotExist\u003c/code\u003e or matched the wrong row. Filters already\nhonored the setting; mutations now do too. The default \u003ccode\u003epk\u003c/code\u003e-based path is\nunchanged.\u003c/p\u003e\n\u003cp\u003eThis release was contributed by \u003ca href=\"https://github.com/ayushin\"\u003e\u003ccode\u003e@​ayushin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/pull/928\"\u003estrawberry-graphql/strawberry-django#928\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/blob/main/CHANGELOG.md\"\u003estrawberry-graphql-django's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.87.0 - 2026-08-06\u003c/h2\u003e\n\u003cp\u003eResolve prefetch-optimized nested connections on the event loop instead of\npaying a \u003ccode\u003esync_to_async\u003c/code\u003e thread hop per parent node: the nested-connection\ndefault resolver, the queryset hook for prefetch-optimized querysets and\n\u003ccode\u003etotalCount\u003c/code\u003e served from the prefetched window annotation no longer touch\nthe database, so they no longer need a worker thread.\u003c/p\u003e\n\u003cp\u003eThis release was contributed by \u003ca href=\"https://github.com/rcybulski1122012\"\u003e\u003ccode\u003e@​rcybulski1122012\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/pull/932\"\u003e#932\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAdditional contributors: \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.86.8 - 2026-08-01\u003c/h2\u003e\n\u003cp\u003eThe built-in toolbar script is now compatible with django-debug-toolbar 7.0.0,\nwhich renders the toolbar inside a shadow DOM by default.\u003c/p\u003e\n\u003cp\u003ePreviously, all DOM queries targeted \u003ccode\u003e#djDebug\u003c/code\u003e directly on the document,\nwhich broke under shadow DOM isolation — \u003ccode\u003equerySelector\u003c/code\u003e cannot pierce a shadow\nboundary.\u003c/p\u003e\n\u003cp\u003eUsing a \u003ccode\u003egetDebugElement()\u003c/code\u003e helper that locates \u003ccode\u003e#djDebug\u003c/code\u003e via\nthe shadow root of its parent element (\u003ccode\u003e#djDebugRoot\u003c/code\u003e):\u003c/p\u003e\n\u003cpre lang=\"js\"\u003e\u003ccode\u003efunction getDebugElement() {\n  const root = document.getElementById(\u0026quot;djDebugRoot\u0026quot;);\n  if (root) {\n    return (root.shadowRoot || root).querySelector(\u0026quot;#djDebug\u0026quot;);\n  }\n  return document.getElementById(\u0026quot;djDebug\u0026quot;);\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThis also handles the \u003ccode\u003eUSE_SHADOW_DOM = False\u003c/code\u003e fallback gracefully, keeping\nbackward compatibility with older versions of the toolbar.\u003c/p\u003e\n\u003cp\u003eThis release was contributed by \u003ca href=\"https://github.com/daudln\"\u003e\u003ccode\u003e@​daudln\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/pull/926\"\u003e#926\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAdditional contributors: \u003ca href=\"https://github.com/bellini666\"\u003e\u003ccode\u003e@​bellini666\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/pre-commit-ci%5Bbot%5D\"\u003e\u003ccode\u003e@​pre-commit-ci[bot]\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.86.7 - 2026-08-01\u003c/h2\u003e\n\u003cp\u003eHonor the \u003ccode\u003eDEFAULT_PK_FIELD_NAME\u003c/code\u003e setting (and per-field \u003ccode\u003ekey_attr\u003c/code\u003e) when\nresolving existing instances in mutation inputs. Previously \u003ccode\u003e_parse_pk\u003c/code\u003e read the\ninput value under \u003ccode\u003ekey_attr\u003c/code\u003e but always looked the instance up by \u003ccode\u003epk=\u003c/code\u003e, so\nrelation inputs and bare-id updates that reference an object by a configured\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/strawberry-graphql/strawberry-django/commit/1513927efbf34956503f359cd32136d5b14484ad\"\u003e\u003ccode\u003e1513927\u003c/code\u003e\u003c/a\u003e perf: resolve prefetch-optimized nested connections without per-node thread h...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/dbda2cef042205a4f3e7b1f6e39167a02c97c962\"\u003e\u003ccode\u003edbda2ce\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/issues/940\"\u003e#940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/23eb6c6e6a53897ddafe8c914e28049fc0e80bf7\"\u003e\u003ccode\u003e23eb6c6\u003c/code\u003e\u003c/a\u003e 🤖 Release 0.86.8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/3d3648702e4d2f27408a55acf5018631dba5be19\"\u003e\u003ccode\u003e3d36487\u003c/code\u003e\u003c/a\u003e fix: update toolbar script for django-debug-toolbar 7.0.0 shadow DOM … (\u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/issues/926\"\u003e#926\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/e47bda41ad89409e013828ece1a8a8cf712afb03\"\u003e\u003ccode\u003ee47bda4\u003c/code\u003e\u003c/a\u003e ci: allow autopub release check to run on fork PRs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/738ffbd38d240d7dcec508765607478212a212b9\"\u003e\u003ccode\u003e738ffbd\u003c/code\u003e\u003c/a\u003e 🤖 Release 0.86.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/d8805243d834e96fb4841ee54056c9755709b2b3\"\u003e\u003ccode\u003ed880524\u003c/code\u003e\u003c/a\u003e fix: honor DEFAULT_PK_FIELD_NAME in mutation instance lookups (\u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/issues/928\"\u003e#928\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/98aa78761a21580e6c7d97daec2356d200d9d1c4\"\u003e\u003ccode\u003e98aa787\u003c/code\u003e\u003c/a\u003e 🤖 Release 0.86.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/5841442d28b45287d7bf5f2d478b8fd465a4cb2e\"\u003e\u003ccode\u003e5841442\u003c/code\u003e\u003c/a\u003e fix: skip the per-parent COUNT for totalCount of empty prefetched nested conn...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/commit/e948384bdf5c21f2d0e4b567679e59deaecaad01\"\u003e\u003ccode\u003ee948384\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/strawberry-graphql/strawberry-django/issues/937\"\u003e#937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/strawberry-graphql/strawberry-django/compare/0.86.4...0.87.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn[standard]` from 0.49.0 to 0.52.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn[standard]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\u003c/a\u003e\u003c/p...\n\n_Description has been truncated_","html_url":"https://github.com/mrchego/rbac/pull/23","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrchego%2Frbac/issues/23","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/23/packages"}},{"old_version":"6.0.6","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-21T21:28:29.000Z","version_change":"6.0.6 → 6.1.0","issue":{"uuid":"5218319400","node_id":"PR_kwDOBNg-c88AAAABAmhXdQ","number":208,"state":"closed","title":"Bump the python group across 1 directory with 17 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T21:26:18.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T21:28:29.000Z","updated_at":"2026-09-04T21:26:20.000Z","time_to_close":1209469,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":17,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"django-ninja","old_version":"1.6.2","new_version":"1.6.3","repository_url":"https://github.com/vitalik/django-ninja"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.70.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"uvicorn","old_version":"0.49.0","new_version":"0.52.3"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0"},{"name":"djlint","old_version":"1.40.2","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.20","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 17 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail[mailgun]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [django-ninja](https://github.com/vitalik/django-ninja) | `1.6.2` | `1.6.3` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.70.0` |\n| [uvicorn[standard]](https://github.com/Kludex/uvicorn) | `0.49.0` | `0.52.3` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.40.2` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.16.3` |\n\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[mailgun]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[mailgun]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[mailgun]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-ninja` from 1.6.2 to 1.6.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/vitalik/django-ninja/releases\"\u003edjango-ninja's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.6.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Django upper version constraint by \u003ca href=\"https://github.com/Stormheg\"\u003e\u003ccode\u003e@​Stormheg\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vitalik/django-ninja/pull/1749\"\u003evitalik/django-ninja#1749\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate packaging metadata to PEP 621 for Flit 4 compatibility (with \u003ca href=\"https://github.com/LexGlu\"\u003e\u003ccode\u003e@​LexGlu\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/vitalik/django-ninja/pull/1753\"\u003evitalik/django-ninja#1753\u003c/a\u003e) in \u003ca href=\"https://redirect.github.com/vitalik/django-ninja/pull/1762\"\u003evitalik/django-ninja#1762\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eHotfix release cut from v1.6.2 — contains only the changes above, none of the other work currently on master.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/vitalik/django-ninja/compare/v1.6.2...v1.6.3\"\u003ehttps://github.com/vitalik/django-ninja/compare/v1.6.2...v1.6.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vitalik/django-ninja/commit/4086c9b36a72aa8e47ef882162a478a017841c0d\"\u003e\u003ccode\u003e4086c9b\u003c/code\u003e\u003c/a\u003e Bump version to 1.6.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vitalik/django-ninja/commit/1229ff928f78be2fd456bcb1b5afaf1eabf8e195\"\u003e\u003ccode\u003e1229ff9\u003c/code\u003e\u003c/a\u003e Migrate pyproject.toml to PEP 621 [project] metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vitalik/django-ninja/commit/9798e0a24b86ab0f5c0422861d4803fff1ccfa91\"\u003e\u003ccode\u003e9798e0a\u003c/code\u003e\u003c/a\u003e Drop Django upper version constraint\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/vitalik/django-ninja/compare/v1.6.2...v1.6.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tqdm` from 4.68.3 to 4.70.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tqdm/tqdm/releases\"\u003etqdm's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003etqdm v4.70.0 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003econtrib.concurrent\u003c/code\u003e: major improvements\n\u003cul\u003e\n\u003cli\u003esupport \u003ccode\u003eprocess_map(mp_context, max_tasks_per_child)\u003c/code\u003e, \u003ccode\u003ethread_map(thread_name_prefix)\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1265\"\u003e#1265\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003etotal\u003c/code\u003e based on shortest iterable length (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1473\"\u003e#1473\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euse default \u003ccode\u003emax_workers\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1543\"\u003e#1543\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1530\"\u003e#1530\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1518\"\u003e#1518\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esupport \u003ccode\u003etimeout\u003c/code\u003e, \u003ccode\u003ebuffersize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1576\"\u003e#1576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eimprove ETA (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1708\"\u003e#1708\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1161\"\u003e#1161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate \u003ccode\u003eas_completed\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1709\"\u003e#1709\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1565\"\u003e#1565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd \u003ccode\u003etqdm.concurrent.intepreter_map\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1777\"\u003e#1777\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003easyncio\u003c/code\u003e: support iterables with only \u003ccode\u003e__aiter__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1714\"\u003e#1714\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1686\"\u003e#1686\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esupport \u003ccode\u003ereset(float(\u0026quot;inf\u0026quot;))\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1783\"\u003e#1783\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1781\"\u003e#1781\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/651\"\u003e#651\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eframework: test \u0026amp; reduce wheel size (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1782\"\u003e#1782\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etqdm v4.69.1 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003econtrib.logging\u003c/code\u003e: preserve filters (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1775\"\u003e#1775\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1581\"\u003e#1581\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erich\u003c/code\u003e: misc fixes (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1773\"\u003e#1773\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003esupport generators (without \u003ccode\u003elen\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1391\"\u003e#1391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix potential \u003ccode\u003eAttributeError\u003c/code\u003e on exit (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1674\"\u003e#1674\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003etotal=float('inf')\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1781\"\u003e#1781\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/651\"\u003e#651\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix potential \u003ccode\u003eAttributeError\u003c/code\u003e on exit (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1778\"\u003e#1778\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1668\"\u003e#1668\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1537\"\u003e#1537\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/261\"\u003e#261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix minor docs typos (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1780\"\u003e#1780\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1746\"\u003e#1746\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etqdm v4.69.0 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd \u003ccode\u003etqdm.asyncio.gather(..., return_exceptions=False)\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1776\"\u003e#1776\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1671\"\u003e#1671\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1286\"\u003e#1286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emisc minor framework updates\n\u003cul\u003e\n\u003cli\u003ebump workflow actions \u0026amp; pre-commit hooks\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etqdm v4.68.4 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003etrim to \u003ccode\u003encols\u003c/code\u003e even when \u003ccode\u003e'{bar}' not in bar_format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1717\"\u003e#1717\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1767\"\u003e#1767\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003etqdm.write\u003c/code\u003e when \u003ccode\u003estdout=None\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1768\"\u003e#1768\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1654\"\u003e#1654\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/tqdm/tqdm/commit/96f2e60e4584cdab57a23602e27043d0465254ad\"\u003e\u003ccode\u003e96f2e60\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1777\"\u003e#1777\u003c/a\u003e from shermansiu/feat/interpreter-pool\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/c27393ec3a0a91d83dd53f04b80ee61f9c0cd5e4\"\u003e\u003ccode\u003ec27393e\u003c/code\u003e\u003c/a\u003e misc tidy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/061c6236d56f8c1ed0934606c3b4ee5c59cf122e\"\u003e\u003ccode\u003e061c623\u003c/code\u003e\u003c/a\u003e Disable \u003ccode\u003etqdm.monitor_interval\u003c/code\u003e for subinterpreters because they do not have ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/9fc160ba7f959f955058985b0d1122fc9f0b2729\"\u003e\u003ccode\u003e9fc160b\u003c/code\u003e\u003c/a\u003e Update how we check for \u003ccode\u003einterpreter_map\u003c/code\u003e support in the tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/b42463a20fffc17ad4df2aa145076afb0dc4486d\"\u003e\u003ccode\u003eb42463a\u003c/code\u003e\u003c/a\u003e Ensure that subinterpreters can import tqdm while unpickling the initializer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/16d5486c402a2808ec9c398538e0bc56d00866de\"\u003e\u003ccode\u003e16d5486\u003c/code\u003e\u003c/a\u003e Add support for nested progress bars\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/9f5890fda6cf43e66782fbf34647f808bdc66d58\"\u003e\u003ccode\u003e9f5890f\u003c/code\u003e\u003c/a\u003e Add initial implementation for interpreter_map\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/321f920bb7368e27eee04fed1c0de2a8a236fd9d\"\u003e\u003ccode\u003e321f920\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1783\"\u003e#1783\u003c/a\u003e from LuShadowX/reset-inf-total\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/4664b5701ebc5299290a1fb31a229fb1bfc64703\"\u003e\u003ccode\u003e4664b57\u003c/code\u003e\u003c/a\u003e minor tidy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/426a0988a1e9970041f5a649ae8a6376c5293fbe\"\u003e\u003ccode\u003e426a098\u003c/code\u003e\u003c/a\u003e Treat inf total as unknown in reset() too\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tqdm/tqdm/compare/v4.68.3...v4.70.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn[standard]` from 0.49.0 to 0.52.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn[standard]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.52.3\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.2...0.52.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.1...0.52.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComplete the closing handshake on server-initiated WebSocket closes in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e and \u003ccode\u003ewsproto\u003c/code\u003e implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing write flow control to the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, preventing data truncation on server-initiated closes with large in-flight payloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3048\"\u003e#3048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle connection loss while a WebSocket write is waiting on backpressure (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3050\"\u003e#3050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eContent-Type\u003c/code\u003e and \u003ccode\u003eContent-Length\u003c/code\u003e headers from WebSocket denial responses on the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, and deliver non-UTF-8 denial bodies intact (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3041\"\u003e#3041\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.52.0...0.52.1\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.52.0...0.52.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.0\u003c/h2\u003e\n\u003cp\u003eThis release adds an experimental HTTP/1.1 implementation backed by \u003ca href=\"https://zttp.marcelotryle.com/\"\u003ezttp\u003c/a\u003e, a sans-IO HTTP parser I've been developing on the side: a core written in Zig, with bindings to Python. It has been running under a fuzzer for some weeks now, and has been through multiple rounds of security auditing.\u003c/p\u003e\n\u003cp\u003eIt is still \u003cstrong\u003eexperimental\u003c/strong\u003e, so don't put it in front of production traffic yet. Try it with \u003ccode\u003e--http zttp\u003c/code\u003e, and please send any feedback to the \u003ca href=\"https://github.com/Kludex/uvicorn/issues\"\u003eissue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an experimental \u003ccode\u003ezttp\u003c/code\u003e HTTP/1.1 implementation, selectable with \u003ccode\u003e--http zttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eKeep non-ASCII WebSocket request headers intact with websockets 17.0, which encodes them with ISO-8859-1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3036\"\u003e#3036\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.51.0...0.52.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.51.0...0.52.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.51.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers with overlap on SIGHUP for near-zero-downtime reloads by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3025\"\u003eKludex/uvicorn#3025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove colorama from the standard extra by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3027\"\u003eKludex/uvicorn#3027\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn[standard]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.52.3 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.24 and use its combined receive path, improving HTTP/1.1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.2 (August 13, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ezttp\u003c/code\u003e to 0.0.22, fixing bodyless request receives and improving HTTP/1 request parsing performance (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.1 (August 1, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eComplete the closing handshake on server-initiated WebSocket closes in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e and \u003ccode\u003ewsproto\u003c/code\u003e implementations, waiting for the client's close reply with a 10 second timeout instead of resetting the connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing write flow control to the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, preventing data truncation on server-initiated closes with large in-flight payloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3048\"\u003e#3048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle connection loss while a WebSocket write is waiting on backpressure (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3050\"\u003e#3050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove duplicate \u003ccode\u003eContent-Type\u003c/code\u003e and \u003ccode\u003eContent-Length\u003c/code\u003e headers from WebSocket denial responses on the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation, and deliver non-UTF-8 denial bodies intact (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3041\"\u003e#3041\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.52.0 (July 29, 2026)\u003c/h2\u003e\n\u003cp\u003eThis release adds an experimental HTTP/1.1 implementation backed by \u003ca href=\"https://zttp.marcelotryle.com/\"\u003ezttp\u003c/a\u003e, a sans-IO HTTP parser I've been developing on the side: a core written in Zig, with bindings to Python. It has been running under a fuzzer for some weeks now, and has been through multiple rounds of security auditing.\u003c/p\u003e\n\u003cp\u003eIt is still \u003cstrong\u003eexperimental\u003c/strong\u003e, so don't put it in front of production traffic yet. Try it with \u003ccode\u003e--http zttp\u003c/code\u003e, and please send any feedback to the \u003ca href=\"https://github.com/Kludex/uvicorn/issues\"\u003eissue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an experimental \u003ccode\u003ezttp\u003c/code\u003e HTTP/1.1 implementation, selectable with \u003ccode\u003e--http zttp\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eKeep non-ASCII WebSocket request headers intact with websockets 17.0, which encodes them with ISO-8859-1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3036\"\u003e#3036\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.51.0 (July 8, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers one at a time on \u003ccode\u003eSIGHUP\u003c/code\u003e, bringing each replacement up before retiring the old worker, so reloads no longer drop requests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003ecolorama\u003c/code\u003e from the \u003ccode\u003estandard\u003c/code\u003e extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.2 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ewebsockets\u0026gt;=13.0\u003c/code\u003e, which the default \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation needs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\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/Kludex/uvicorn/commit/a68da608147c5f79d962352dce11de8f6e32d972\"\u003e\u003ccode\u003ea68da60\u003c/code\u003e\u003c/a\u003e Version 0.52.3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3068\"\u003e#3068\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/6e3bb4c5c22531c16d341f2da49f2653307f412f\"\u003e\u003ccode\u003e6e3bb4c\u003c/code\u003e\u003c/a\u003e Use zttp 0.0.24 fast receive path (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3067\"\u003e#3067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2a5ff183e02e6dce62f363009c85574bd5a23de2\"\u003e\u003ccode\u003e2a5ff18\u003c/code\u003e\u003c/a\u003e Version 0.52.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3066\"\u003e#3066\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1920297df92b9cf5e6befb00327c1e34276db46f\"\u003e\u003ccode\u003e1920297\u003c/code\u003e\u003c/a\u003e Update zttp to 0.0.22 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3063\"\u003e#3063\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/5c560dae6a87f6109d958c6154277f1dc727f704\"\u003e\u003ccode\u003e5c560da\u003c/code\u003e\u003c/a\u003e chore(deps): bump pymdown-extensions from 11.0 to 11.0.1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3061\"\u003e#3061\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/ee8e45ca472db17b4aef1d539f209539062d002e\"\u003e\u003ccode\u003eee8e45c\u003c/code\u003e\u003c/a\u003e Version 0.52.1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3056\"\u003e#3056\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b57926d3f46348b5773b184cdf53ae8588300b77\"\u003e\u003ccode\u003eb57926d\u003c/code\u003e\u003c/a\u003e Remove duplicate content headers from WebSocket denial responses on websocket...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/49de1b91d497d038d97a0475f7459fbf66b9b8f9\"\u003e\u003ccode\u003e49de1b9\u003c/code\u003e\u003c/a\u003e chore(deps): bump pymdown-extensions from 10.21.3 to 11.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3042\"\u003e#3042\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2f3fa3ab55b945d34d3933ec267be5b6ca41fc14\"\u003e\u003ccode\u003e2f3fa3a\u003c/code\u003e\u003c/a\u003e Complete server-initiated closes in SansIO WebSocket protocols (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3053\"\u003e#3053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/8c59d55b92b94fd5bee5960d1456ff8cb3072a32\"\u003e\u003ccode\u003e8c59d55\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group with 5 updates (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3054\"\u003e#3054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.49.0...0.52.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically\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/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.0...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.6 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddja...\n\n_Description has been truncated_","html_url":"https://github.com/danielstp/cappuccino2/pull/208","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielstp%2Fcappuccino2/issues/208","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/208/packages"}},{"old_version":"6.0.7","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-21T18:38:25.000Z","version_change":"6.0.7 → 6.1.0","issue":{"uuid":"5217114662","node_id":"PR_kwDOToIJA88AAAABAlj9Qg","number":15,"state":"closed","title":"Bump the python group across 1 directory with 17 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T18:36:22.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T18:38:25.000Z","updated_at":"2026-09-04T18:36:24.000Z","time_to_close":1209477,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":17,"packages":[{"name":"django","old_version":"6.0.7","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"coverage","old_version":"7.15.2","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.7","new_version":"6.1.0"},{"name":"django-upgrade","old_version":"1.31.1","new_version":"1.32.0","repository_url":"https://github.com/adamchainz/django-upgrade"},{"name":"djangorestframework-stubs","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.43.1","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.3.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.1","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.16.0","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 17 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.7` | `6.1` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail[sendgrid]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.2` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.7` | `6.1.0` |\n| [django-upgrade](https://github.com/adamchainz/django-upgrade) | `1.31.1` | `1.32.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.1` | `3.18.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.43.1` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.3.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.1` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.16.0` | `0.16.3` |\n\n\nUpdates `django` from 6.0.7 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.7...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[sendgrid]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[sendgrid]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[sendgrid]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.2 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.2...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.7 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.7...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-upgrade` from 1.31.1 to 1.32.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/adamchainz/django-upgrade/blob/main/docs/changelog.rst\"\u003edjango-upgrade's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.32.0 (2026-08-18)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport Python 3.15.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#681](https://github.com/adamchainz/django-upgrade/issues/681) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/681\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eutils_text \u0026lt;utils_text\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003eunescape_entities()\u003c/code\u003e calls with \u003ccode\u003ehtml.unescape()\u003c/code\u003e.\nPreviously it incorrectly used \u003ccode\u003ehtml.escape()\u003c/code\u003e, which performs the inverse operation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#684](https://github.com/adamchainz/django-upgrade/issues/684) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/684\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer crash on empty \u003ccode\u003eindex_together\u003c/code\u003e declarations.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#685](https://github.com/adamchainz/django-upgrade/issues/685) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/685\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to not add a duplicate \u003ccode\u003eindexes\u003c/code\u003e declaration when the existing one is not a list or tuple literal.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#686](https://github.com/adamchainz/django-upgrade/issues/686) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/686\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to add a missing comma when extending a multiline \u003ccode\u003eindexes\u003c/code\u003e list that has no trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#687](https://github.com/adamchainz/django-upgrade/issues/687) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/687\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eindex_together \u0026lt;index_together\u0026gt;\u003c/code\u003e fixer to keep an empty \u003ccode\u003eindexes\u003c/code\u003e tuple a tuple when extending it with a single index.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#716](https://github.com/adamchainz/django-upgrade/issues/716) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/716\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003eformat_html \u0026lt;format_html\u0026gt;\u003c/code\u003e fixer to skip calls with a parenthesized argument, where removing the \u003ccode\u003e.format()\u003c/code\u003e call would create a tuple.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#717](https://github.com/adamchainz/django-upgrade/issues/717) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/717\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer to add a missing comma before \u003ccode\u003enull=True\u003c/code\u003e when the final argument contains commas within brackets.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#688](https://github.com/adamchainz/django-upgrade/issues/688) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/688\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix fixers that modify call arguments to not treat a comment inside otherwise empty parentheses as an argument, which made the :ref:\u003ccode\u003enull_boolean_field \u0026lt;null_boolean_field\u0026gt;\u003c/code\u003e fixer produce invalid syntax.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#718](https://github.com/adamchainz/django-upgrade/issues/718) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/718\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to avoid a double comma when the existing \u003ccode\u003eheaders=\u003c/code\u003e dict has a trailing comma.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#689](https://github.com/adamchainz/django-upgrade/issues/689) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/689\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etest_http_headers \u0026lt;test_http_headers\u0026gt;\u003c/code\u003e fixer to insert converted headers at the start of an existing \u003ccode\u003eheaders=\u003c/code\u003e dict.\nDjango gives \u003ccode\u003eheaders=\u003c/code\u003e entries precedence over \u003ccode\u003eHTTP_\u003c/code\u003e arguments, and the last duplicate key wins in a dict literal, so appending converted entries at the end previously flipped which value took effect.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ePR [#723](https://github.com/adamchainz/django-upgrade/issues/723) \u0026lt;https://github.com/adamchainz/django-upgrade/pull/723\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix :ref:\u003ccode\u003etestcase_databases \u0026lt;testcase_databases\u0026gt;\u003c/code\u003e fixer to rewrite \u003ccode\u003emulti_db = False\u003c/code\u003e to \u003ccode\u003edatabases = [\u0026quot;default\u0026quot;]\u003c/code\u003e rather than \u003ccode\u003edatabases = []\u003c/code\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/adamchainz/django-upgrade/commit/423ab5081e037d3c692113d654d49ea9e3ee0066\"\u003e\u003ccode\u003e423ab50\u003c/code\u003e\u003c/a\u003e Version 1.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/7b1224a970289729eb50a1fffca04844a8c1ab1f\"\u003e\u003ccode\u003e7b1224a\u003c/code\u003e\u003c/a\u003e Tidy changelog (\u003ca href=\"https://redirect.github.com/adamchainz/django-upgrade/issues/729\"\u003e#729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adamchainz/django-upgrade/commit/63607890eb3090bded91c6432b43948a1757bd1e\"\u003e\u003ccode\u003e6360789\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eforms_model_multiple_choice_field...\n\n_Description has been truncated_","html_url":"https://github.com/tchongwangbakayoko619-star/api_gestion_biblotheque/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tchongwangbakayoko619-star%2Fapi_gestion_biblotheque/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"6.0.6","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-21T17:08:34.000Z","version_change":"6.0.6 → 6.1.0","issue":{"uuid":"5216433842","node_id":"PR_kwDOTJHTL88AAAABAlBHzQ","number":96,"state":"closed","title":"chore(deps): bump the python group across 1 directory with 19 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T17:08:05.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T17:08:34.000Z","updated_at":"2026-09-04T17:08:07.000Z","time_to_close":1209571,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python","update_count":19,"packages":[{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"djangorestframework","old_version":"3.17.1","new_version":"3.18.0","repository_url":"https://github.com/encode/django-rest-framework"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"flower","old_version":"2.0.1","new_version":"2.1.0","repository_url":"https://github.com/mher/flower"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"coverage","old_version":"7.14.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0"},{"name":"djangorestframework-stubs","old_version":"3.17.0","new_version":"3.18.0","repository_url":"https://github.com/typeddjango/djangorestframework-stubs"},{"name":"djlint","old_version":"1.39.5","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.20","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 19 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail[mailgun]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [djangorestframework](https://github.com/encode/django-rest-framework) | `3.17.1` | `3.18.0` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [flower](https://github.com/mher/flower) | `2.0.1` | `2.1.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.3` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [djangorestframework-stubs](https://github.com/typeddjango/djangorestframework-stubs) | `3.17.0` | `3.18.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.39.5` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.16.3` |\n\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[mailgun]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[mailgun]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[mailgun]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djangorestframework` from 3.17.1 to 3.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/django-rest-framework/releases\"\u003edjangorestframework's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.18.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Django 4.2, Django 5.0 and Django 5.1 by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9899\"\u003eencode/django-rest-framework#9899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange errors for list serializers (\u003ccode\u003emany=True\u003c/code\u003e) to dict format by \u003ca href=\"https://github.com/p-r-a-v-i-n\"\u003e\u003ccode\u003e@​p-r-a-v-i-n\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9837\"\u003eencode/django-rest-framework#9837\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eunaccent\u003c/code\u003e to \u003ccode\u003eSearchFilter\u003c/code\u003e by \u003ca href=\"https://github.com/mgaligniana\"\u003e\u003ccode\u003e@​mgaligniana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9385\"\u003eencode/django-rest-framework#9385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/browniebroke\"\u003e\u003ccode\u003e@​browniebroke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10003\"\u003eencode/django-rest-framework#10003\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e@throttle_scope\u003c/code\u003e function based view decorator by \u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enulls_distinct\u003c/code\u003e support to \u003ccode\u003eUniqueTogetherValidator\u003c/code\u003e by \u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInclude \u003ccode\u003echoices\u003c/code\u003e param for non-editable fields by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9929\"\u003eencode/django-rest-framework#9929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove cursor pagination template accessibility in browsable API by \u003ca href=\"https://github.com/kosbemrunal\"\u003e\u003ccode\u003e@​kosbemrunal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9905\"\u003eencode/django-rest-framework#9905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial form data updates involving \u003ccode\u003eListField\u003c/code\u003e by \u003ca href=\"https://github.com/Natgho\"\u003e\u003ccode\u003e@​Natgho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9902\"\u003eencode/django-rest-framework#9902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix crash due to browsable API extra action permissions by \u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle unhashable \u003ccode\u003eBooleanField\u003c/code\u003e representation value by \u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix OpenAPI schema for zero numeric bounds on ListField children by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ecc_delim_re usage\u003c/code\u003e with \u003ccode\u003esplit_header_value\u003c/code\u003e for Django 6.1+ compatibility by \u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eset_rollback\u003c/code\u003e to only rollback initialized connections by \u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix DictField HTML input returning empty dict for missing fields by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise clear error for unsupported unique-together list updates by \u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9981\"\u003eencode/django-rest-framework#9981\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrepare release 3.18.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\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/Im-Bilal\"\u003e\u003ccode\u003e@​Im-Bilal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9967\"\u003eencode/django-rest-framework#9967\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dlfoerster\"\u003e\u003ccode\u003e@​dlfoerster\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9934\"\u003eencode/django-rest-framework#9934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/emfpdlzj\"\u003e\u003ccode\u003e@​emfpdlzj\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9973\"\u003eencode/django-rest-framework#9973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/zainnadeem786\"\u003e\u003ccode\u003e@​zainnadeem786\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9977\"\u003eencode/django-rest-framework#9977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laymonage\"\u003e\u003ccode\u003e@​laymonage\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/harshitkandpal\"\u003e\u003ccode\u003e@​harshitkandpal\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9993\"\u003eencode/django-rest-framework#9993\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/udit-prabhakar\"\u003e\u003ccode\u003e@​udit-prabhakar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9962\"\u003eencode/django-rest-framework#9962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sai09111995\"\u003e\u003ccode\u003e@​sai09111995\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9884\"\u003eencode/django-rest-framework#9884\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/d-ryzhykau\"\u003e\u003ccode\u003e@​d-ryzhykau\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9963\"\u003eencode/django-rest-framework#9963\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Elkasitu\"\u003e\u003ccode\u003e@​Elkasitu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/8494\"\u003eencode/django-rest-framework#8494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vishalanandl177\"\u003e\u003ccode\u003e@​vishalanandl177\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10002\"\u003eencode/django-rest-framework#10002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jdetaeye\"\u003e\u003ccode\u003e@​jdetaeye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9599\"\u003eencode/django-rest-framework#9599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9891\"\u003eencode/django-rest-framework#9891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mag123c\"\u003e\u003ccode\u003e@​mag123c\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9866\"\u003eencode/django-rest-framework#9866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anurag12anu\"\u003e\u003ccode\u003e@​anurag12anu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9814\"\u003eencode/django-rest-framework#9814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/10015\"\u003eencode/django-rest-framework#10015\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ehttps://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.17.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/11875a38f483cea69d8ef2fd9ede6b96fb602ec4\"\u003e\u003ccode\u003e11875a3\u003c/code\u003e\u003c/a\u003e Prepare release 3.18.0 (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10015\"\u003e#10015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/d346a8c3c92a36fdb462c992331e238d0a737305\"\u003e\u003ccode\u003ed346a8c\u003c/code\u003e\u003c/a\u003e Add note about Browsable API simulating \u003ccode\u003ePOST\u003c/code\u003e in documentation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9814\"\u003e#9814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/80d535ddf08226020a9f44ca57f6eb1bbd91fa6a\"\u003e\u003ccode\u003e80d535d\u003c/code\u003e\u003c/a\u003e Fix GHA workflow for preparing release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/aa1876b8b6009a618e6241f91e2c2d6dfbacb5d9\"\u003e\u003ccode\u003eaa1876b\u003c/code\u003e\u003c/a\u003e Update fields.md explaining how the \u003ccode\u003esource\u003c/code\u003e argument affects `.validated_dat...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/000bb334f7995a972e700f81fbdbd50a80f38985\"\u003e\u003ccode\u003e000bb33\u003c/code\u003e\u003c/a\u003e Add nulls_distinct support to UniqueTogetherValidator (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9866\"\u003e#9866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/7508e0cf122d5250a2cba824a3c537a288acb489\"\u003e\u003ccode\u003e7508e0c\u003c/code\u003e\u003c/a\u003e Raise clear error for unsupported list update validation (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9981\"\u003e#9981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/69d1cd7f1322060397b7f747d199e3926f5d297b\"\u003e\u003ccode\u003e69d1cd7\u003c/code\u003e\u003c/a\u003e Fix DictField HTML input returning empty dict for missing fields (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9891\"\u003e#9891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/bbc62aca6f67a2a7fe0427a768973f5d9f143c58\"\u003e\u003ccode\u003ebbc62ac\u003c/code\u003e\u003c/a\u003e Update Django 6.1 dependency to stable release. (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/10016\"\u003e#10016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/f78043440a7884936232fdffffb68adcdbb3b272\"\u003e\u003ccode\u003ef780434\u003c/code\u003e\u003c/a\u003e Add GHA workflow to prepare a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/django-rest-framework/commit/dc027d2bb41c3858fc2fc95bf2b04b33f0cdc5be\"\u003e\u003ccode\u003edc027d2\u003c/code\u003e\u003c/a\u003e set_rollback should only rollback initialized connections (\u003ca href=\"https://redirect.github.com/encode/django-rest-framework/issues/9599\"\u003e#9599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/django-rest-framework/compare/3.17.1...3.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `drf-spectacular` from 0.29.0 to 0.30.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tfranzel/drf-spectacular/releases\"\u003edrf-spectacular's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.30.0\u003c/h2\u003e\n\u003cp\u003eAfter working through the backlog for several week, we are finally in a comfortable place again. Thank you to all contributors and users that waited patiently for me the catch up. It does not include all the PRs that were opened, but imho the most critical ones.\u003c/p\u003e\n\u003cp\u003eThis release includes many small improvement, a few bug fixes, updates to the test suite and a renovated test matrix. Some minor schema corrections are to be expected, but nothing drastic. It is mostly fixing small inconsistencies and improving corner cases.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression introduced in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1450\"\u003e#1450\u003c/a\u003e by \u003ca href=\"https://github.com/hoefling\"\u003e\u003ccode\u003e@​hoefling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1469\"\u003etfranzel/drf-spectacular#1469\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix dependency definition for Django 5.2 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1487\"\u003etfranzel/drf-spectacular#1487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add support for Django 6.0 and and DRF 3.17 by \u003ca href=\"https://github.com/vgrozdanic\"\u003e\u003ccode\u003e@​vgrozdanic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1496\"\u003etfranzel/drf-spectacular#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Support for unsigned integers uint16, uint32 and uint64 by \u003ca href=\"https://github.com/ticosax\"\u003e\u003ccode\u003e@​ticosax\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1483\"\u003etfranzel/drf-spectacular#1483\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplement x-spec-enum-id for type hint Choices. by \u003ca href=\"https://github.com/noamkush\"\u003e\u003ccode\u003e@​noamkush\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1486\"\u003etfranzel/drf-spectacular#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarifies Docs in Customizations.rst by \u003ca href=\"https://github.com/APCBoston\"\u003e\u003ccode\u003e@​APCBoston\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1489\"\u003etfranzel/drf-spectacular#1489\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd setting to disable docstring extraction by \u003ca href=\"https://github.com/philipstarkey\"\u003e\u003ccode\u003e@​philipstarkey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1491\"\u003etfranzel/drf-spectacular#1491\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add support for polymorphic built-in drf support by \u003ca href=\"https://github.com/mastacheata\"\u003e\u003ccode\u003e@​mastacheata\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1490\"\u003etfranzel/drf-spectacular#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocument \u003ccode\u003edjango-rest-knox\u003c/code\u003e support by \u003ca href=\"https://github.com/johnthagen\"\u003e\u003ccode\u003e@​johnthagen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1503\"\u003etfranzel/drf-spectacular#1503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd help text to spectacular management command arguments \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1175\"\u003e#1175\u003c/a\u003e by \u003ca href=\"https://github.com/jbbqqf\"\u003e\u003ccode\u003e@​jbbqqf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1502\"\u003etfranzel/drf-spectacular#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echange conflicting license field for 3.8 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1504\"\u003etfranzel/drf-spectacular#1504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePr1438 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1505\"\u003etfranzel/drf-spectacular#1505\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd blueprint for django-rest-knox by \u003ca href=\"https://github.com/johnthagen\"\u003e\u003ccode\u003e@​johnthagen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1506\"\u003etfranzel/drf-spectacular#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePr1499 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1511\"\u003etfranzel/drf-spectacular#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eType hint build_bearer_security_scheme_object by \u003ca href=\"https://github.com/johnthagen\"\u003e\u003ccode\u003e@​johnthagen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1509\"\u003etfranzel/drf-spectacular#1509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHousekeeping by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1512\"\u003etfranzel/drf-spectacular#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePr1501 by \u003ca href=\"https://github.com/tfranzel\"\u003e\u003ccode\u003e@​tfranzel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1514\"\u003etfranzel/drf-spectacular#1514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nullable FileField response schema when blank=True (\u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1493\"\u003e#1493\u003c/a\u003e) by \u003ca href=\"https://github.com/mojtabasohrabi\"\u003e\u003ccode\u003e@​mojtabasohrabi\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1501\"\u003etfranzel/drf-spectacular#1501\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/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1487\"\u003etfranzel/drf-spectacular#1487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vgrozdanic\"\u003e\u003ccode\u003e@​vgrozdanic\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1496\"\u003etfranzel/drf-spectacular#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/noamkush\"\u003e\u003ccode\u003e@​noamkush\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1486\"\u003etfranzel/drf-spectacular#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/APCBoston\"\u003e\u003ccode\u003e@​APCBoston\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1489\"\u003etfranzel/drf-spectacular#1489\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/philipstarkey\"\u003e\u003ccode\u003e@​philipstarkey\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1491\"\u003etfranzel/drf-spectacular#1491\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mastacheata\"\u003e\u003ccode\u003e@​mastacheata\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1490\"\u003etfranzel/drf-spectacular#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jbbqqf\"\u003e\u003ccode\u003e@​jbbqqf\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1502\"\u003etfranzel/drf-spectacular#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mojtabasohrabi\"\u003e\u003ccode\u003e@​mojtabasohrabi\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/pull/1501\"\u003etfranzel/drf-spectacular#1501\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tfranzel/drf-spectacular/compare/0.29.0...0.30.0\"\u003ehttps://github.com/tfranzel/drf-spectacular/compare/0.29.0...0.30.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/tfranzel/drf-spectacular/blob/master/CHANGELOG.rst\"\u003edrf-spectacular's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.30.0 (2026-07-06)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd OAS 3.2 schema for validation \u0026amp; test\u003c/li\u003e\n\u003cli\u003eType hint build_bearer_security_scheme_object (\u003ccode\u003e[#1509](https://github.com/tfranzel/drf-spectacular/issues/1509) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1509\u0026gt;\u003c/code\u003e_) [johnthagen]\u003c/li\u003e\n\u003cli\u003eFix formatted CharField allow_blank handling (\u003ccode\u003e[#1511](https://github.com/tfranzel/drf-spectacular/issues/1511) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1511\u0026gt;\u003c/code\u003e\u003cem\u003e, (\u003ccode\u003e[#1499](https://github.com/tfranzel/drf-spectacular/issues/1499) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1499\u0026gt;\u003c/code\u003e\u003c/em\u003e)) [Luciano de la Iglesia]\u003c/li\u003e\n\u003cli\u003eConsider allOf anyOf with nullable on OAS3.1 \u003ccode\u003e[#1480](https://github.com/tfranzel/drf-spectacular/issues/1480) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1480\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eProper handling for OAS 3.2\u003c/li\u003e\n\u003cli\u003efix modification of user-provided schematas \u003ccode\u003e[#1500](https://github.com/tfranzel/drf-spectacular/issues/1500) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1500\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003erelax contraint on oneOf null case with OAS3.1 \u003ccode\u003e[#1480](https://github.com/tfranzel/drf-spectacular/issues/1480) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1480\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eAdd blueprint for django-rest-knox (\u003ccode\u003e[#1506](https://github.com/tfranzel/drf-spectacular/issues/1506) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1506\u0026gt;\u003c/code\u003e_) [johnthagen]\u003c/li\u003e\n\u003cli\u003eMitigate GeneratedField lost arguments and special case for DecimalField \u003ccode\u003e[#1166](https://github.com/tfranzel/drf-spectacular/issues/1166) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1166\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eWebhook explicit operationId (\u003ccode\u003e[#1505](https://github.com/tfranzel/drf-spectacular/issues/1505) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1505\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003echange conflicting license field for 3.8 (\u003ccode\u003e[#1504](https://github.com/tfranzel/drf-spectacular/issues/1504) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1504\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eDocument django-rest-knox support [johnthagen]\u003c/li\u003e\n\u003cli\u003eadd help text to spectacular management command arguments \u003ccode\u003e[#1175](https://github.com/tfranzel/drf-spectacular/issues/1175) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1175\u0026gt;\u003c/code\u003e_ [Jean-Baptiste Braun]\u003c/li\u003e\n\u003cli\u003eMark FileField as nullable in response when not required \u003ccode\u003e[#1493](https://github.com/tfranzel/drf-spectacular/issues/1493) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1493\u0026gt;\u003c/code\u003e_ [mojtaba sohrabi]\u003c/li\u003e\n\u003cli\u003eExtend Choices hint fix with generated label description \u003ccode\u003e[#1486](https://github.com/tfranzel/drf-spectacular/issues/1486) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1486\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eSuppress py\u0026lt;=3.14 deprecation warning \u003ccode\u003e[#1497](https://github.com/tfranzel/drf-spectacular/issues/1497) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1497\u0026gt;\u003c/code\u003e_\u003c/li\u003e\n\u003cli\u003eRemove ancient DRF3.11 and Django2.2 due to contrib packages failing\u003c/li\u003e\n\u003cli\u003efeat: add support for django 6.0 and and drf 3.17 [Vjeran Grozdanic]\u003c/li\u003e\n\u003cli\u003eAdd setting to disable docstring extraction [Phil Starkey]\u003c/li\u003e\n\u003cli\u003efeat: add support for polymorphic built-in drf support [Benedikt Bauer]\u003c/li\u003e\n\u003cli\u003eClarifies post-processing hooks [Andy Piltser-Cowan]\u003c/li\u003e\n\u003cli\u003eClarifies customizations step 5 [Andy Piltser-Cowan]\u003c/li\u003e\n\u003cli\u003eFix dependency definition for Django 5.2 [Ülgen Sarıkavak]\u003c/li\u003e\n\u003cli\u003eImplement x-spec-enum-id for type hint Choices. [Noam Kushinsky]\u003c/li\u003e\n\u003cli\u003eAdd Support for unsigned integers uint16, uint32 and uint64 [Nicolas Delaby]\u003c/li\u003e\n\u003cli\u003eFix regression introduced in \u003ccode\u003e[#1450](https://github.com/tfranzel/drf-spectacular/issues/1450) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1450\u0026gt;\u003c/code\u003e_ (\u003ccode\u003e[#1469](https://github.com/tfranzel/drf-spectacular/issues/1469) \u0026lt;https://github.com/tfranzel/drf-spectacular/issues/1469\u0026gt;\u003c/code\u003e_) [Oleg Höfling]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBreaking changes / important additions:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMany small improvement, bug fixes, updates to the test suite and renovated test matrix. Some minor schema corrections are to be expected, but nothing drastic.\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/tfranzel/drf-spectacular/commit/1a5c44a15b2d06744f49285f1f58992f938a05fa\"\u003e\u003ccode\u003e1a5c44a\u003c/code\u003e\u003c/a\u003e version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/6ba553fc827613d7b36efc9d9f53043e4a2e5443\"\u003e\u003ccode\u003e6ba553f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1514\"\u003e#1514\u003c/a\u003e from tfranzel/pr1501\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/d4787a4e2ef0ff4b7c6a72fe3dddf1ea8e8a963c\"\u003e\u003ccode\u003ed4787a4\u003c/code\u003e\u003c/a\u003e Adapt FileField null handling \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/d8679422975c68bc3a2c97c278957ec043d915c1\"\u003e\u003ccode\u003ed867942\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1512\"\u003e#1512\u003c/a\u003e from tfranzel/housekeeping26\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/5685cf8b731f9a93d9c66003ac2569d4ef7540a8\"\u003e\u003ccode\u003e5685cf8\u003c/code\u003e\u003c/a\u003e Add OAS 3.2 schema for validation \u0026amp; test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/9fa6f7c1f8d99ef14d9dfa11b89f432ba370242f\"\u003e\u003ccode\u003e9fa6f7c\u003c/code\u003e\u003c/a\u003e minor cleanup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/69033ea1e371fb254731c9e9164fd403ace3c5d4\"\u003e\u003ccode\u003e69033ea\u003c/code\u003e\u003c/a\u003e update linting version due to misleading security warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/d9e0de6717c9953b3e9c66da6a5bc6aefb714827\"\u003e\u003ccode\u003ed9e0de6\u003c/code\u003e\u003c/a\u003e Type hint build_bearer_security_scheme_object (\u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1509\"\u003e#1509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/9b18b302b697ba1a5e86271a7e4d090a5995cc21\"\u003e\u003ccode\u003e9b18b30\u003c/code\u003e\u003c/a\u003e Pr1499 (\u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1511\"\u003e#1511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tfranzel/drf-spectacular/commit/6e3c72ea5df8e8452a2b8c3e792a7cab23814446\"\u003e\u003ccode\u003e6e3c72e\u003c/code\u003e\u003c/a\u003e Consider allOf anyOf with nullable on OAS3.1 \u003ca href=\"https://redirect.github.com/tfranzel/drf-spectacular/issues/1480\"\u003e#1480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tfranzel/drf-spectacular/compare/0.29.0...0.30.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flower` from 2.0.1 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mher/flower/releases\"\u003eflower's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the GitLab authentication handler name by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented database filename by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed the documented max tasks default by \u003ca href=\"https://github.com/masahiro331\"\u003e\u003ccode\u003e@​masahiro331\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/mher/flower/issues/1415\"\u003e#1415\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/mher/flower/blob/v2.1.0/CHANGELOG.md\"\u003eflower's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFlower 2.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded read-only mode for the UI and API \u003ca href=\"https://redirect.github.com/mher/flower/issues/1468\"\u003e#1468\u003c/a\u003e by \u003ca href=\"https://github.com/MrEarle\"\u003e\u003ccode\u003e@​MrEarle\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated the UI with a responsive design.\u003c/li\u003e\n\u003cli\u003eAdded persistent dark mode with light and system theme options.\u003c/li\u003e\n\u003cli\u003eAdded a browser favicon \u003ca href=\"https://redirect.github.com/mher/flower/issues/1502\"\u003e#1502\u003c/a\u003e by \u003ca href=\"https://github.com/rolfws\"\u003e\u003ccode\u003e@​rolfws\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved task search with boolean operators and field filters.\u003c/li\u003e\n\u003cli\u003ePreserved task-table preferences across visits \u003ca href=\"https://redirect.github.com/mher/flower/issues/1333\"\u003e#1333\u003c/a\u003e by \u003ca href=\"https://github.com/fretman92\"\u003e\u003ccode\u003e@​fretman92\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded TLS support for Redis Sentinel \u003ca href=\"https://redirect.github.com/mher/flower/issues/1327\"\u003e#1327\u003c/a\u003e by \u003ca href=\"https://github.com/cyberjunk\"\u003e\u003ccode\u003e@​cyberjunk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded AMQPS support for RabbitMQ connections by \u003ca href=\"https://github.com/borland667\"\u003e\u003ccode\u003e@​borland667\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUpdated and auto-provisioned the Grafana dashboard.\u003c/li\u003e\n\u003cli\u003eEnabled API access in the Docker Compose demo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance and reliability\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved blocking broker and control operations off the I/O loop.\u003c/li\u003e\n\u003cli\u003eMade Redis queue inspection asynchronous and pipelined.\u003c/li\u003e\n\u003cli\u003ePrevented duplicate worker inspections.\u003c/li\u003e\n\u003cli\u003eFixed broker connection leaks \u003ca href=\"https://redirect.github.com/mher/flower/issues/1490\"\u003e#1490\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePurged stale offline-worker Prometheus metrics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1128\"\u003e#1128\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePersisted dashboard counters across restarts \u003ca href=\"https://redirect.github.com/mher/flower/issues/787\"\u003e#787\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved handling of missing custom configuration files.\u003c/li\u003e\n\u003cli\u003eFixed startup banner output when using a dynamic port \u003ca href=\"https://redirect.github.com/mher/flower/issues/1449\"\u003e#1449\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker active-task totals when counts are null \u003ca href=\"https://redirect.github.com/mher/flower/issues/1511\"\u003e#1511\u003c/a\u003e by \u003ca href=\"https://github.com/M4RC0Sx\"\u003e\u003ccode\u003e@​M4RC0Sx\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed undefined worker pool grow and shrink values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1324\"\u003e#1324\u003c/a\u003e by \u003ca href=\"https://github.com/daydaychen\"\u003e\u003ccode\u003e@​daydaychen\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Redis SSL configurations \u003ca href=\"https://redirect.github.com/mher/flower/issues/1177\"\u003e#1177\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed percent-encoded IPv6 broker addresses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1220\"\u003e#1220\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eStopped exposing broker alternate URLs in worker statistics \u003ca href=\"https://redirect.github.com/mher/flower/issues/1512\"\u003e#1512\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed broker page rendering when queue inspection fails \u003ca href=\"https://redirect.github.com/mher/flower/issues/1501\"\u003e#1501\u003c/a\u003e by \u003ca href=\"https://github.com/alexei\"\u003e\u003ccode\u003e@​alexei\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed autoscaling response interpolation \u003ca href=\"https://redirect.github.com/mher/flower/issues/1427\"\u003e#1427\u003c/a\u003e by \u003ca href=\"https://github.com/funkyrailroad\"\u003e\u003ccode\u003e@​funkyrailroad\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImproved GitHub OAuth errors when email access is unavailable \u003ca href=\"https://redirect.github.com/mher/flower/issues/1486\"\u003e#1486\u003c/a\u003e by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePrevented authentication failures while rendering error pages \u003ca href=\"https://redirect.github.com/mher/flower/issues/1268\"\u003e#1268\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mher/flower/issues/1499\"\u003e#1499\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task search for non-string values \u003ca href=\"https://redirect.github.com/mher/flower/issues/1401\"\u003e#1401\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed task state filters to require the state prefix \u003ca href=\"https://redirect.github.com/mher/flower/issues/1516\"\u003e#1516\u003c/a\u003e by \u003ca href=\"https://github.com/AleksaMCode\"\u003e\u003ccode\u003e@​AleksaMCode\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed worker names in timeout and rate-limit error responses \u003ca href=\"https://redirect.github.com/mher/flower/issues/1506\"\u003e#1506\u003c/a\u003e by \u003ca href=\"https://github.com/phanky1\"\u003e\u003ccode\u003e@​phanky1\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumented custom authentication providers \u003ca href=\"https://redirect.github.com/mher/flower/issues/1344\"\u003e#1344\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the GitLab authentication handler name \u003ca href=\"https://redirect.github.com/mher/flower/issues/1325\"\u003e#1325\u003c/a\u003e by \u003ca href=\"https://github.com/Saluev\"\u003e\u003ccode\u003e@​Saluev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the persistent database CLI example \u003ca href=\"https://redirect.github.com/mher/flower/issues/1326\"\u003e#1326\u003c/a\u003e by \u003ca href=\"https://github.com/hatamiarash7\"\u003e\u003ccode\u003e@​hatamiarash7\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed the Grafana example URL \u003ca href=\"https://redirect.github.com/mher/flower/issues/1345\"\u003e#1345\u003c/a\u003e by \u003ca href=\"https://github.com/NiclasvanEyk\"\u003e\u003ccode\u003e@​NiclasvanEyk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the nginx reverse-proxy example by \u003ca href=\"https://github.com/titovanton\"\u003e\u003ccode\u003e@​titovanton\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdded the GitHub repository link to the documentation by \u003ca href=\"https://github.com/PamelaM\"\u003e\u003ccode\u003e@​PamelaM\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCorrected the documented database filename \u003ca href=\"https://redirect.github.com/mher/flower/issues/1494\"\u003e#1494\u003c/a\u003e by \u003ca href=\"https://github.com/WilliamDEdwards\"\u003e\u003ccode\u003e@​WilliamDEdwards\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/3597bd1a94280cb3a3f2cbe53d0b6616f56cbde8\"\u003e\u003ccode\u003e3597bd1\u003c/code\u003e\u003c/a\u003e Set release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/d083f7317e4e273ff62de59082b89ce390cecf50\"\u003e\u003ccode\u003ed083f73\u003c/code\u003e\u003c/a\u003e Update documentation for 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b58869bcdcceb46d37d806fee8698fefd9d94bd9\"\u003e\u003ccode\u003eb58869b\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/master' into 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/e6cf8ef78776098bf8d3f1674056fc00dd62e388\"\u003e\u003ccode\u003ee6cf8ef\u003c/code\u003e\u003c/a\u003e Add Python 3.13 and 3.14 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/8ecede927b87e49ddb2856fbf61f7577d3c87273\"\u003e\u003ccode\u003e8ecede9\u003c/code\u003e\u003c/a\u003e Document custom authentication providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/00d310bb92914a21318052aa4ed02a996a95ca00\"\u003e\u003ccode\u003e00d310b\u003c/code\u003e\u003c/a\u003e Persist dashboard counters across restarts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/0a5116087085596a466caee4caa473da1a8b8394\"\u003e\u003ccode\u003e0a51160\u003c/code\u003e\u003c/a\u003e Purge offline workers from metrics\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/72a09c8795d29b4a8e042285bff4e9ac2b7afda4\"\u003e\u003ccode\u003e72a09c8\u003c/code\u003e\u003c/a\u003e Prevent duplicate worker inspections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/17ead90a68a2eec82be3e03c9f0350f02ddc60dd\"\u003e\u003ccode\u003e17ead90\u003c/code\u003e\u003c/a\u003e Make Redis queue inspection non-blocking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mher/flower/commit/b11ddcb2175c47ac0001b3744d4e3bad41bc6ba4\"\u003e\u003ccode\u003eb11ddcb\u003c/code\u003e\u003c/a\u003e Update blocking operation handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mher/flower/compare/v2.0.1...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href...\n\n_Description has been truncated_","html_url":"https://github.com/shaoqian-dev/ConvoCore/pull/96","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/shaoqian-dev%2FConvoCore/issues/96","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/96/packages"}},{"old_version":"6.0.6","new_version":"6.1.0","update_type":"minor","path":null,"pr_created_at":"2026-08-21T15:57:54.000Z","version_change":"6.0.6 → 6.1.0","issue":{"uuid":"5215887172","node_id":"PR_kwDOTKijKM8AAAABAklCag","number":27,"state":"closed","title":"Bump the python group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-09-04T15:56:53.000Z","author_association":null,"state_reason":null,"created_at":"2026-08-21T15:57:54.000Z","updated_at":"2026-09-04T15:56:54.000Z","time_to_close":1209539,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python","update_count":20,"packages":[{"name":"django","old_version":"6.0.4","new_version":"6.1","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.18.0","new_version":"65.19.1","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-anymail","old_version":"15.0","new_version":"15.1"},{"name":"django-crispy-forms","old_version":"2.6","new_version":"2.7","repository_url":"https://github.com/django-crispy-forms/django-crispy-forms"},{"name":"gunicorn","old_version":"26.0.0","new_version":"26.1.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"hiredis","old_version":"3.4.0","new_version":"3.4.1","repository_url":"https://github.com/redis/hiredis-py"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"redis","old_version":"8.0.1","new_version":"8.1.0","repository_url":"https://github.com/redis/redis-py"},{"name":"coverage","old_version":"7.14.3","new_version":"7.15.4","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-debug-toolbar","old_version":"7.0.0","new_version":"7.1.1","repository_url":"https://github.com/django-commons/django-debug-toolbar"},{"name":"django-stubs","old_version":"6.0.6","new_version":"6.1.0"},{"name":"djlint","old_version":"1.40.0","new_version":"1.44.2","repository_url":"https://github.com/djlint/djLint"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.1","repository_url":"https://github.com/python/mypy"},{"name":"pre-commit","old_version":"4.6.0","new_version":"4.6.2","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"pytest-django","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/pytest-dev/pytest-django"},{"name":"ruff","old_version":"0.15.20","new_version":"0.16.3","repository_url":"https://github.com/astral-sh/ruff"},{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"django-allauth","old_version":"65.16.0","new_version":"65.19.1","repository_url":"https://github.com/sponsors/pennersr"},{"name":"sqlparse","old_version":"0.5.5","new_version":"0.6.0","repository_url":"https://github.com/andialbrecht/sqlparse"},{"name":"python-dotenv","old_version":"1.2.2","new_version":"1.2.3","repository_url":"https://github.com/theskumar/python-dotenv"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django](https://github.com/django/django) | `6.0.4` | `6.1` |\n| [django-allauth[mfa]](https://github.com/sponsors/pennersr) | `65.18.0` | `65.19.1` |\n| [django-anymail[mailgun]](https://github.com/anymail/django-anymail) | `15.0` | `15.1` |\n| [django-crispy-forms](https://github.com/django-crispy-forms/django-crispy-forms) | `2.6` | `2.7` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `26.0.0` | `26.1.0` |\n| [hiredis](https://github.com/redis/hiredis-py) | `3.4.0` | `3.4.1` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [redis](https://github.com/redis/redis-py) | `8.0.1` | `8.1.0` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.3` | `7.15.4` |\n| [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) | `7.0.0` | `7.1.1` |\n| [django-stubs[compatible-mypy]](https://github.com/typeddjango/django-stubs) | `6.0.6` | `6.1.0` |\n| [djlint](https://github.com/djlint/djLint) | `1.40.0` | `1.44.2` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.1` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.6.0` | `4.6.2` |\n| [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.16.3` |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.16.0` | `65.19.1` |\n| [sqlparse](https://github.com/andialbrecht/sqlparse) | `0.5.5` | `0.6.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.2` | `1.2.3` |\n\n\nUpdates `django` from 6.0.4 to 6.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fe0a859f537d4238cf49fca39073513206f83122\"\u003e\u003ccode\u003efe0a859\u003c/code\u003e\u003c/a\u003e [6.1.x] Bumped version for 6.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/62770454c1beb3e9b0ef1f7c35c5670b4df935d8\"\u003e\u003ccode\u003e6277045\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated man page for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/fc78c5cdbb621dff3893c109433022896022fde1\"\u003e\u003ccode\u003efc78c5c\u003c/code\u003e\u003c/a\u003e [6.1.x] Finalized release notes for Django 6.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c58d86162cd59602df96f0e716cae9849acb3ddb\"\u003e\u003ccode\u003ec58d861\u003c/code\u003e\u003c/a\u003e [6.1.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dc1b8deff467010aaae71471ae12ebc82188a8a3\"\u003e\u003ccode\u003edc1b8de\u003c/code\u003e\u003c/a\u003e [6.1.x] Added missing lang override in translation fetching helper for Serbia...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1f5bf635df6f0919191f649aef29acb3063978f2\"\u003e\u003ccode\u003e1f5bf63\u003c/code\u003e\u003c/a\u003e [6.1.x] Refs \u003ca href=\"https://redirect.github.com/django/django/issues/36735\"\u003e#36735\u003c/a\u003e -- Added DatabaseFeatures.supports_uuid4_function_in_defa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/809998448b45284aa6152112feb46d927b209019\"\u003e\u003ccode\u003e8099984\u003c/code\u003e\u003c/a\u003e [6.1.x] Added CVE-2026-15307, CVE-2026-15337, CVE-2026-15830, and CVE-2026-15...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a\"\u003e\u003ccode\u003e5a260d3\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15920 -- Made display_for_field() validate URLs before...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/9e4a3f186b6b07b483bfd9195ea06734663fcd06\"\u003e\u003ccode\u003e9e4a3f1\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15830 -- Mitigated potential DoS via nested geometry c...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/5b3523d29be25948e1dd90b3863a002f00fc865f\"\u003e\u003ccode\u003e5b3523d\u003c/code\u003e\u003c/a\u003e [6.1.x] Fixed CVE-2026-15337 -- Mitigated potential DoS in check_for_language().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/6.0.4...6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth[mfa]` from 65.18.0 to 65.19.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-anymail[mailgun]` from 15.0 to 15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/releases\"\u003edjango-anymail[mailgun]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://anymail.dev/en/stable/changelog/#v15-1\"\u003eChangelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anymail/django-anymail/blob/main/CHANGELOG.rst\"\u003edjango-anymail[mailgun]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev15.1\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e2026-07-30\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eFixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **Amazon SES, Brevo:** Fix ``InvalidMailer`` error about \u0026quot;Unknown options\u0026quot;\n  when used with Django 6.1 ``MAILERS`` setting.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePostmark:\u003c/strong\u003e Raise an unsupported feature error when \u003ccode\u003emerge_data\u003c/code\u003e or\n\u003ccode\u003emerge_global_data\u003c/code\u003e is used without a \u003ccode\u003etemplate_id\u003c/code\u003e. Anymail passes that\ndata to Postmark in its \u003ccode\u003eTemplateModel\u003c/code\u003e field, which is silently ignored\nwhen sending through a non-template API. (Thanks to \u003ccode\u003e@slinkymanbyday\u003c/code\u003e_ for\nreporting the issue and \u003ccode\u003e@Sanjays2402\u003c/code\u003e_ for the fix.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTest against prerelease versions of Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDeprecations\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Support for ``fail_silently`` in Anymail's email backends is being phased out,\n  matching Django's deprecation of the feature. Anymail will issue a deprecation\n  warning when ``fail_silently`` is used. Support for it will be dropped in a\n  future release when Django 6.2 support is discontinued.\n\u003cp\u003eSee \u003ccode\u003eReplacing fail_silently \u0026amp;lt;https://docs.djangoproject.com/en/6.1/howto/mailers-migration/#migrating-to-mailers-fail-silently\u0026amp;gt;\u003c/code\u003e_\nin Django's documentation for recommendations.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/8c40cc46f6a7aa308c5cabe99c0ea13733b5e079\"\u003e\u003ccode\u003e8c40cc4\u003c/code\u003e\u003c/a\u003e Release 15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/7e8b81bab3465b84ea2374814211a435cb1255ad\"\u003e\u003ccode\u003e7e8b81b\u003c/code\u003e\u003c/a\u003e Postmark: Handle merge_data without template_id as unsupported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/d973c84e317554d4047c8998721060be6af41381\"\u003e\u003ccode\u003ed973c84\u003c/code\u003e\u003c/a\u003e Update URLs to Mailjet's documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/16719488929c979058be55dec598caa20194eba5\"\u003e\u003ccode\u003e1671948\u003c/code\u003e\u003c/a\u003e Update readme for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/0dfc0aa6afe487105bc381f90f1baf4be5776768\"\u003e\u003ccode\u003e0dfc0aa\u003c/code\u003e\u003c/a\u003e Add 'docs-watch' tox environment for sphinx-autobuild\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/232477aecf5b994b98697ac2ec3fbbb183d6973f\"\u003e\u003ccode\u003e232477a\u003c/code\u003e\u003c/a\u003e Deprecate fail_silently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e56745200b3381a3266891e5cb58630c347d8ba5\"\u003e\u003ccode\u003ee567452\u003c/code\u003e\u003c/a\u003e Improve support for MAILERS configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/e670d788ea2f1539005dd3e93a324b025c88be89\"\u003e\u003ccode\u003ee670d78\u003c/code\u003e\u003c/a\u003e Amazon SES, Brevo: Fix compatibility with Django 6.1 MAILERS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/15b57e283ac0c964b4832997b669ba99bd25f1a3\"\u003e\u003ccode\u003e15b57e2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.1 pre-release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anymail/django-anymail/commit/171fa385f9a49bf6720217d8f6b29502e9c262ef\"\u003e\u003ccode\u003e171fa38\u003c/code\u003e\u003c/a\u003e Change black and isort to target Python 3.10\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anymail/django-anymail/compare/v15.0...v15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-crispy-forms` from 2.6 to 2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/releases\"\u003edjango-crispy-forms's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/blob/main/CHANGELOG.md\"\u003edjango-crispy-forms's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7 (2026-07-29)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfirmed support for Django 6.1.\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/django-crispy-forms/django-crispy-forms/commit/e7fbb538595dde3a4598b4403e60ecca0905fa74\"\u003e\u003ccode\u003ee7fbb53\u003c/code\u003e\u003c/a\u003e Release 2.7. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1438\"\u003e#1438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/9d6b32129dea4c89caa87218a11192503646b9da\"\u003e\u003ccode\u003e9d6b321\u003c/code\u003e\u003c/a\u003e Bumped github actions versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/974b5b7390c0b11698c348128b164990cb6f044b\"\u003e\u003ccode\u003e974b5b7\u003c/code\u003e\u003c/a\u003e Bumped RTD OS and Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/5218268f520ca19c665e6f02a49df647eb977af6\"\u003e\u003ccode\u003e5218268\u003c/code\u003e\u003c/a\u003e Confirmed support for Django 6.1. (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/commit/847873cf09f0ee96beb38273190860008a6712dd\"\u003e\u003ccode\u003e847873c\u003c/code\u003e\u003c/a\u003e docs: replace 'basestring' with 'str' (\u003ca href=\"https://redirect.github.com/django-crispy-forms/django-crispy-forms/issues/1433\"\u003e#1433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-crispy-forms/django-crispy-forms/compare/2.6...2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 26.0.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egunicorn 26.1.0\u003c/h2\u003e\n\u003ch3\u003eNew Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGlob patterns in \u003ccode\u003ereload_extra_files\u003c/code\u003e\u003c/strong\u003e: entries containing \u003ccode\u003e*\u003c/code\u003e, \u003ccode\u003e?\u003c/code\u003e or \u003ccode\u003e[\u003c/code\u003e\nare treated as patterns, so \u003ccode\u003eui/*/config.json\u003c/code\u003e watches every view's config\nwithout listing them one by one. Patterns are re-expanded on every reload\ncheck rather than once at startup, so a file created later starts being\nwatched without restarting gunicorn, and \u003ccode\u003e**\u003c/code\u003e recurses. A pattern matching\nnothing warns instead of failing, since with live expansion it may match later\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/1643\"\u003e#1643\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3662\"\u003e#3662\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDependency floors raised past known advisories\u003c/strong\u003e: every declared floor was\nchecked against the advisory database. \u003ccode\u003etornado\u003c/code\u003e, \u003ccode\u003eh2\u003c/code\u003e, \u003ccode\u003esetuptools\u003c/code\u003e and\n\u003ccode\u003epymdown-extensions\u003c/code\u003e permitted vulnerable versions and now require the first\nclean release; \u003ccode\u003epytest\u003c/code\u003e and \u003ccode\u003ehttpx\u003c/code\u003e were unpinned and now carry floors. The\n\u003ccode\u003etornado\u003c/code\u003e example pinned \u003ccode\u003etornado\u0026lt;6\u003c/code\u003e, which was both the source of several\nadvisories and older than the \u003ccode\u003e\u0026gt;=6.5.0\u003c/code\u003e the tornado worker needs, so the\nexample could not run as pinned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eSIGHUP did not reload the logger configuration\u003c/strong\u003e: \u003ccode\u003eArbiter.reload()\u003c/code\u003e\nre-read the configuration file but kept using the logger built at startup,\ncalling only \u003ccode\u003ereopen_files()\u003c/code\u003e on its existing handlers. Changes to\n\u003ccode\u003elogconfig\u003c/code\u003e, \u003ccode\u003elogconfig_dict\u003c/code\u003e, \u003ccode\u003elogconfig_json\u003c/code\u003e and \u003ccode\u003eloglevel\u003c/code\u003e were ignored\nuntil a full restart, which in containers meant replacing the pod. The\nexisting logger now re-runs its setup on reload, so new handlers, formats\nand levels take effect while the process identity and its listeners are\npreserved, and re-running the setup no longer stacks duplicate syslog\nhandlers. An invalid log configuration on reload is not fatal either: the\nerror is reported on stderr, the previous working configuration is restored\nand the master keeps running with it\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3353\"\u003e#3353\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eTruncated chunked bodies accepted\u003c/strong\u003e: RFC 9112 section 7.1.2 ends a chunked\nbody with \u003ccode\u003e0 CRLF CRLF\u003c/code\u003e, the second CRLF being the mandatory empty trailer\nsection. \u003ccode\u003eChunkedReader.parse_chunk_size()\u003c/code\u003e swallowed the \u003ccode\u003eNoMoreData\u003c/code\u003e raised\nwhile scanning for it, so a body cut short right after the last chunk line was\ntreated as complete instead of rejected. It now raises\n\u003ccode\u003eChunkMissingTerminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3382\"\u003e#3382\u003c/a\u003e,\n\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/pull/3685\"\u003e#3685\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode\u003e--spew\u003c/code\u003e crashed on dynamically generated code\u003c/strong\u003e: the trace hook indexed the\n2-tuple returned by \u003ccode\u003einspect.getsourcelines()\u003c/code\u003e by line number rather than\nindexing the list of lines, so a frame with no \u003ccode\u003e__file__\u003c/code\u003e raised\n\u003ccode\u003eAttributeError: 'int' object has no attribute 'rstrip'\u003c/code\u003e on line 1 and\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/benoitc/gunicorn/commit/71b59a75820dd4a762dc42a3280124168b4e44a8\"\u003e\u003ccode\u003e71b59a7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3698\"\u003e#3698\u003c/a\u003e from benoitc/fix/docker-health-check-readerror\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/48287de8d8360825c85ac981ddfe9c80dba3b418\"\u003e\u003ccode\u003e48287de\u003c/code\u003e\u003c/a\u003e test: catch every transport error in the docker health check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/3110e8c37f716ca0ed63ca7f80c7c9ea0fbbdd50\"\u003e\u003ccode\u003e3110e8c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3696\"\u003e#3696\u003c/a\u003e from benoitc/docs/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/cc56c410b7103c1f2b877279f81cb3a14705315a\"\u003e\u003ccode\u003ecc56c41\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3693\"\u003e#3693\u003c/a\u003e from benoitc/release/26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5cf1f1651a40fa36afe13fde623e3437ca872463\"\u003e\u003ccode\u003e5cf1f16\u003c/code\u003e\u003c/a\u003e docs: surface the roadmap on the site home page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/7e35f72d135056c37da321becf22b19aeec06937\"\u003e\u003ccode\u003e7e35f72\u003c/code\u003e\u003c/a\u003e docs: add FastCGI to the roadmap and point items at Ideas\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/18ddc586c9b9513b25e92c6ed6f818f66ff3abcd\"\u003e\u003ccode\u003e18ddc58\u003c/code\u003e\u003c/a\u003e docs: drop the framework and reverse-proxy non-goals from the roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/1ecae56ebd096ee4f94d12c59a36f240ce348572\"\u003e\u003ccode\u003e1ecae56\u003c/code\u003e\u003c/a\u003e docs: add a roadmap and make the chat easy to find\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/ca412e3f7134bd9f0e91851778ae6d8dd222cf41\"\u003e\u003ccode\u003eca412e3\u003c/code\u003e\u003c/a\u003e docs: sync the Latest changelog page with 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/640936fb29f7bdf5665d5b7f919783bb73e2f981\"\u003e\u003ccode\u003e640936f\u003c/code\u003e\u003c/a\u003e docs: note the dependency security work in 26.1.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/26.0.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hiredis` from 3.4.0 to 3.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/hiredis-py/releases\"\u003ehiredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.4.1\u003c/h2\u003e\n\u003cp\u003eThis is a security fix release. All users of hiredis-py 3.4.x are strongly encouraged to upgrade.\u003c/p\u003e\n\u003ch1\u003e🔒 Security Fixes\u003c/h1\u003e\n\u003cp\u003eUpdates the bundled hiredis C library to \u003ca href=\"https://github.com/redis/hiredis/releases/tag/v1.4.1\"\u003ev1.4.1\u003c/a\u003e, which fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1340\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eredis/hiredis#1341\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eVulnerability discovered by He Huang (\u003ca href=\"mailto:hehuang@swin.edu.au\"\u003ehehuang@swin.edu.au\u003c/a\u003e), Swinburne University of Technology, Melbourne, Australia; discovered using NexusSan.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/hiredis-py/commit/70d83795c44558f50d9166c64b1d05311eaa8066\"\u003e\u003ccode\u003e70d8379\u003c/code\u003e\u003c/a\u003e [3.4] Bump hiredis to v1.4.1, release 3.4.1 (\u003ca href=\"https://redirect.github.com/redis/hiredis-py/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/redis/hiredis-py/compare/v3.4.0...v3.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 8.0.1 to 8.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\u003e8.1.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e✨ Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync maintenance notifications\u003c/h3\u003e\n\u003cp\u003eredis-py now supports server-pushed \u003cstrong\u003emaintenance notifications\u003c/strong\u003e in the asyncio stack for both\nstandalone and cluster clients, bringing the async client to parity with the sync implementation.\nWhen a Redis deployment signals maintenance events (such as node migration or failover windows), the\nasync client reacts through the maintenance-notifications handler (\u003ccode\u003eredis/maint_notifications.py\u003c/code\u003e and\nits async integration under \u003ccode\u003eredis/asyncio/\u003c/code\u003e), allowing applications to adapt connection handling\nduring maintenance without downtime. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eExpanded command coverage\u003c/h3\u003e\n\u003cp\u003eThis release adds a batch of new command surfaces across core data types and modules:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLists\u003c/strong\u003e — \u003ccode\u003eLMOVEM\u003c/code\u003e / \u003ccode\u003eBLMOVEM\u003c/code\u003e for moving multiple elements between lists (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSets\u003c/strong\u003e — \u003ccode\u003eSDIFFCARD\u003c/code\u003e and \u003ccode\u003eSUNIONCARD\u003c/code\u003e cardinality commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStreams\u003c/strong\u003e — \u003ccode\u003eMAXCOUNT\u003c/code\u003e / \u003ccode\u003eMAXSIZE\u003c/code\u003e options for \u003ccode\u003eXREAD\u003c/code\u003e and \u003ccode\u003eXREADGROUP\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTime Series\u003c/strong\u003e — \u003ccode\u003eTS.READ\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e), \u003ccode\u003eTS.QUERYLABELS\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e), \u003ccode\u003eTS.NRANGE\u003c/code\u003e / \u003ccode\u003eTS.NREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e),\nand an \u003ccode\u003eexclude_empty\u003c/code\u003e (\u003ccode\u003eEXCLUDEEMPTY\u003c/code\u003e) option for \u003ccode\u003eTS.MRANGE\u003c/code\u003e / \u003ccode\u003eTS.MREVRANGE\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSearch\u003c/strong\u003e — \u003ccode\u003eFT.ALIASLIST\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e) and a \u003ccode\u003eCOLLECT\u003c/code\u003e reducer for aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSentinel\u003c/strong\u003e — replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd replica sentinel aliases (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4127\"\u003e#4127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd TS.NRANGE and TS.NREVRANGE support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4163\"\u003e#4163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.READ command support to the timeseries module (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4170\"\u003e#4170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add SDIFFCARD and SUNIONCARD command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4171\"\u003e#4171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add MAXCOUNT/MAXSIZE support to XREAD and XREADGROUP (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4173\"\u003e#4173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add LMOVEM and BLMOVEM commands for moving multiple list elements (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4174\"\u003e#4174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add async maintenance-notifications support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add COLLECT reducer support to search aggregations (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4179\"\u003e#4179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add exclude_empty (EXCLUDEEMPTY) option to TS.MRANGE and TS.MREVRANGE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4188\"\u003e#4188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add TS.QUERYLABELS support to the timeseries command surface (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4197\"\u003e#4197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚠️ Experimental\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add client-side HIMPORT fieldset support for standalone and cluster clients (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4205\"\u003e#4205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe feature considered unstable and \u003cstrong\u003epublic API might be changed in the future minor version\u003c/strong\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: detect closed pooled connection without consuming pending push data (RESP3 + hiredis) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4156\"\u003e#4156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Sentinel pool capacity loss after failover (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4193\"\u003e#4193\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/e013126df18e476fbb8b8215f040f39bd3242683\"\u003e\u003ccode\u003ee013126\u003c/code\u003e\u003c/a\u003e Testing with 8.10 GA (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4227\"\u003e#4227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/059d1e97d88dd7ed516628e0a9765ab8e0e299f1\"\u003e\u003ccode\u003e059d1e9\u003c/code\u003e\u003c/a\u003e Fixed TS.NRANGE commands to correctly apply aggregators (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4225\"\u003e#4225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d486a0a982dcdf316006474dc286ca65cbec5a9f\"\u003e\u003ccode\u003ed486a0a\u003c/code\u003e\u003c/a\u003e Fix FIELDNAME alias dropping first character of un-prefixed fields (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4224\"\u003e#4224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/fb931042420baaa5fbb9021955e444f7afa66dc2\"\u003e\u003ccode\u003efb93104\u003c/code\u003e\u003c/a\u003e feat: add client-side HIMPORT fieldset support for standalone and cluster cli...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/9197609f48eb9713411a50534ca48210486a4bf9\"\u003e\u003ccode\u003e9197609\u003c/code\u003e\u003c/a\u003e Fix lat/lon swap in search querystring geo() helper (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4223\"\u003e#4223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/14714a0812d3ff03ad34c89ce6f79e287a04e9fb\"\u003e\u003ccode\u003e14714a0\u003c/code\u003e\u003c/a\u003e fix: Fixed double decoding issue with unquote() (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4222\"\u003e#4222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/227280a939718d09ff9d7c41f9785ffdc21bdc2a\"\u003e\u003ccode\u003e227280a\u003c/code\u003e\u003c/a\u003e Update lib version to 8.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/88d16d0db10c852d1d292628b2c832f1ed117056\"\u003e\u003ccode\u003e88d16d0\u003c/code\u003e\u003c/a\u003e Decode ACL LOG string values on the default RESP3 legacy callback (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4201\"\u003e#4201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/599fd75ca7d0745928280ff3a64ccd224dbf2b76\"\u003e\u003ccode\u003e599fd75\u003c/code\u003e\u003c/a\u003e feat: add FT.ALIASLIST support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4198\"\u003e#4198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/71e275e6eae94d202b49bccce10ef0d2a59050e7\"\u003e\u003ccode\u003e71e275e\u003c/code\u003e\u003c/a\u003e test: add VectorField RERANK serialization tests for sync and async search (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v8.0.1...v8.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.14.3 to 7.15.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.4\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report, a source file name containing a double quote (legal on POSIX) wasn’t escaped where it’s dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index and prev/next links, so it could close the attribute early and inject markup. Page URLs are now escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report wrote file names and other fields into its line-oriented records without neutralizing control characters. A measured file whose name contained a newline (legal on POSIX) could forge extra records, inflating the coverage seen by tools that read the report. Control characters in a field are now replaced. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWheels are now provided for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.4\"\u003ecoverage 7.15.4\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.4\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.3\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the combination would be prevented when read from the coverage.py configuration. But using the context API as pytest-cov does, contexts would be silently dropped. Now a warning is issued, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003eJisang Han\u003c/a\u003e. Closes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003eissue 2200\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA performance improvement in the low-level line number bookkeeping when combining data files, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance improvement in HTML reporting by reducing the number of times files have to be parsed, thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003eKevin Turcios\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.3\"\u003ecoverage 7.15.3\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.3\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.0\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.0 — 2026-07-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSince 7.14.0, reporting commands implicitly combine parallel data files. Now those commands have a new option \u003ccode\u003e--keep-combined\u003c/code\u003e to retain the data files after combining them instead of the default, which is to delete them. Finishes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2198\"\u003eissue 2198\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: the LCOV report would incorrectly count excluded functions as uncovered, as described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2205\"\u003eissue 2205\u003c/a\u003e. This is now fixed thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2206\"\u003eMartin Kuntz Jacobsen\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWhen running your program, coverage now correctly sets \u003ccode\u003eyourmodule.__spec__.loader\u003c/code\u003e as \u003ca href=\"\"\u003estrongly recommended\u003c/a\u003e, avoiding the deprecation warning described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2208\"\u003eissue 2208\u003c/a\u003e. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2209\"\u003eA5rocks\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix: with Python 3.10, running with the \u003ccode\u003e-I\u003c/code\u003e (isolated mode) option didn’t correctly omit the current directory from the module search path, as described in \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2103\"\u003eissue 2103\u003c/a\u003e. That is now fixed thanks to \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2211\"\u003eIlia Sorokin\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.0\"\u003ecoverage 7.15.0\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.0\u003c/code\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/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.4 — 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report, a source file name containing a double quote (legal\non POSIX) wasn't escaped where it's dropped into the \u003ccode\u003ehref\u003c/code\u003e of the index\nand prev/next links, so it could close the attribute early and inject markup.\nPage URLs are now escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2227_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report wrote file names and other fields into its\nline-oriented records without neutralizing control characters. A measured\nfile whose name contained a newline (legal on POSIX) could forge extra\nrecords, inflating the coverage seen by tools that read the report. Control\ncharacters in a field are now replaced. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2226_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWheels are now provided for Python 3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2226: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2226\"\u003ecoveragepy/coveragepy#2226\u003c/a\u003e\n.. _pull 2227: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2227\"\u003ecoveragepy/coveragepy#2227\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.3 — 2026-08-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the sysmon core is incompatible with dynamic contexts. Previously, the\ncombination would be prevented when read from the coverage.py configuration.\nBut using the context API as pytest-cov does, contexts would be silently\ndropped. Now a warning is issued, thanks to \u003ccode\u003eJisang Han \u0026lt;pull 2234_\u0026gt;\u003c/code\u003e\u003cem\u003e.\nCloses \u003ccode\u003eissue 2200\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA performance improvement in the low-level line number bookkeeping when\ncombining data files, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2239_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ePerformance improvement in HTML reporting by reducing the number of times\nfiles have to be parsed, thanks to \u003ccode\u003eKevin Turcios \u0026lt;pull 2240_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2200: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2200\"\u003ecoveragepy/coveragepy#2200\u003c/a\u003e\n.. _pull 2234: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2234\"\u003ecoveragepy/coveragepy#2234\u003c/a\u003e\n.. _pull 2239: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2239\"\u003ecoveragepy/coveragepy#2239\u003c/a\u003e\n.. _pull 2240: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2240\"\u003ecoveragepy/coveragepy#2240\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-2:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically\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/coveragepy/coveragepy/commit/4c0e7ff425ecbb33e2b994b41118a71eb4e39021\"\u003e\u003ccode\u003e4c0e7ff\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/db4cc3216ca5bb436eba697aaa74d886e4ea82c8\"\u003e\u003ccode\u003edb4cc32\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c33085c3fcec4dd01fc3a0419c90de7ee6b869a7\"\u003e\u003ccode\u003ec33085c\u003c/code\u003e\u003c/a\u003e style: start gradual move to ruff 0.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53a0fd51ba05047624baf58bf8f288d56185df93\"\u003e\u003ccode\u003e53a0fd5\u003c/code\u003e\u003c/a\u003e fix: neutralize control characters in lcov report fields (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2226\"\u003e#2226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b64d53dd6f113b68a19ac6c1b855e34bbebfad4e\"\u003e\u003ccode\u003eb64d53d\u003c/code\u003e\u003c/a\u003e build: make 3.15 wheels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/53792ab496adf740a38d1f67e0162705b4d67c07\"\u003e\u003ccode\u003e53792ab\u003c/code\u003e\u003c/a\u003e build: show the python version for kits\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f6b03c77ffb8d58b25950bae63d36b7a1c585a70\"\u003e\u003ccode\u003ef6b03c7\u003c/code\u003e\u003c/a\u003e chore: make upgrade_one package=cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/d9b660ac2a6bc64a39c4a2e7f195bb6bd6f7af89\"\u003e\u003ccode\u003ed9b660a\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b128a3172ec0cc4d70398f663e56d0362f5de4ea\"\u003e\u003ccode\u003eb128a31\u003c/code\u003e\u003c/a\u003e docs: oops, move this entry to the correct place\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/a7a2c15669cc6e8fdb46e5012954c795a63e9a27\"\u003e\u003ccode\u003ea7a2c15\u003c/code\u003e\u003c/a\u003e fix: escape filename urls in html report href attributes (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2227\"\u003e#2227\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.3...7.15.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-debug-toolbar` from 7.0.0 to 7.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/releases\"\u003edjango-debug-toolbar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize TaskResult in the Tasks panel to accommodate the storage mechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel’s kwargs column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize the TaskResult class for Tasks panel. by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2444\"\u003edjango-commons/django-debug-toolbar#2444\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.1.0...7.1.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via Django’s built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On older versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django’s boolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that can resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container network.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without parameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not find the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked before the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the Django version check in the SQL panel by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2403\"\u003edjango-commons/django-debug-toolbar#2403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix some small issues in docs/installation.rst by \u003ca href=\"https://github.com/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilence the MiddlewareMixin deprecation warning explicitly by \u003ca href=\"https://github.com/matthiask\"\u003e\u003ccode\u003e@​matthiask\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2416\"\u003edjango-commons/django-debug-toolbar#2416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Tasks panel showing tasks queued during the request by \u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix integration tests by \u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Django 6.1 by \u003ca href=\"https://github.com/ulgens\"\u003e\u003ccode\u003e@​ulgens\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2435\"\u003edjango-commons/django-debug-toolbar#2435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix show_toolbar_with_docker on runtimes with unrelated host address by \u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove selenium tests reliability in CI by \u003ca href=\"https://github.com/tim-schilling\"\u003e\u003ccode\u003e@​tim-schilling\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2438\"\u003edjango-commons/django-debug-toolbar#2438\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/leggewie\"\u003e\u003ccode\u003e@​leggewie\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2409\"\u003edjango-commons/django-debug-toolbar#2409\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/onxxdatas\"\u003e\u003ccode\u003e@​onxxdatas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2407\"\u003edjango-commons/django-debug-toolbar#2407\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novucs\"\u003e\u003ccode\u003e@​novucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2434\"\u003edjango-commons/django-debug-toolbar#2434\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Sanjays2402\"\u003e\u003ccode\u003e@​Sanjays2402\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/pull/2422\"\u003edjango-commons/django-debug-toolbar#2422\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\"\u003ehttps://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst\"\u003edjango-debug-toolbar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.1 (2026-08-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSerialize \u003ccode\u003eTaskResult\u003c/code\u003e in the Tasks panel to accommodate the storage\nmechanism.\u003c/li\u003e\n\u003cli\u003eRemoved whitespace on Task panel's \u003ccode\u003ekwargs\u003c/code\u003e column.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0 (2026-08-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a Tasks panel that shows tasks queued during the request via\nDjango's built-in tasks framework (\u003ccode\u003edjango.tasks\u003c/code\u003e, Django 6.0+). On\nolder versions of Django, the panel explains that upgrading is required.\u003c/li\u003e\n\u003cli\u003eFixed the Django version check in the SQL panel test suite for Django's\nboolean parameter handling.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eshow_toolbar_with_docker\u003c/code\u003e on Docker runtimes such as OrbStack that\ncan resolve \u003ccode\u003ehost.docker.internal\u003c/code\u003e to an address outside the container\nnetwork.\u003c/li\u003e\n\u003cli\u003eRestored the select and explain buttons for queries that run without\nparameters.\u003c/li\u003e\n\u003cli\u003eFixed the error shown when panel content fails to load, which could not\nfind the toolbar window inside the shadow root.\u003c/li\u003e\n\u003cli\u003eStopped the history panel buttons from submitting their form when clicked\nbefore the panel script has loaded, which navigated away from the page.\u003c/li\u003e\n\u003cli\u003eAdded support for Django 6.1.\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/django-commons/django-debug-toolbar/commit/f307de14d1a533273b6de7bd39579b043eb54a99\"\u003e\u003ccode\u003ef307de1\u003c/code\u003e\u003c/a\u003e Version 7.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/73951a4c517bafa5369228f2fca8306510f1cbf1\"\u003e\u003ccode\u003e73951a4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2439\"\u003e#2439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/678b687e0a30c2657dc21b1d859d1141098997a0\"\u003e\u003ccode\u003e678b687\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2442\"\u003e#2442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/7627683d89fc1c77bc2dc4550f15eede9a86cee6\"\u003e\u003ccode\u003e7627683\u003c/code\u003e\u003c/a\u003e Serialize the TaskResult class for Tasks panel. (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2444\"\u003e#2444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/a2d4260c8646ff552a0117068a624a91cd00b167\"\u003e\u003ccode\u003ea2d4260\u003c/code\u003e\u003c/a\u003e Version 7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/d89606a1bfbe7e4ca17156f262ba2fc22050f253\"\u003e\u003ccode\u003ed89606a\u003c/code\u003e\u003c/a\u003e Improve selenium tests reliability in CI (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2438\"\u003e#2438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/e367e1b77eaf85e54c35985338945ae09caec58d\"\u003e\u003ccode\u003ee367e1b\u003c/code\u003e\u003c/a\u003e Fix show_toolbar_with_docker on runtimes with unrelated host address (\u003ca href=\"https://redirect.github.com/django-commons/django-debug-toolbar/issues/2422\"\u003e#2422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/49f4ef349a12a938c5cb7ef529f1f96e5ffb74b2\"\u003e\u003ccode\u003e49f4ef3\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/3d3d0106c9a20e4deb0d4f9a63ca806338b8516b\"\u003e\u003ccode\u003e3d3d010\u003c/code\u003e\u003c/a\u003e Add support for Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-commons/django-debug-toolbar/commit/f5717342b927db1fc085844762db3e9d76174c7c\"\u003e\u003ccode\u003ef571734\u003c/code\u003e\u003c/a\u003e Stop the history panel buttons from submitting their forms\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-commons/django-debug-toolbar/compare/7.0.0...7.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs[compatible-mypy]` from 6.0.6 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/typeddjango/django-stubs/releases\"\u003edjango-stubs[compatible-mypy]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is the first Django 6.1 release 🎉\u003c/p\u003e\n\u003cp\u003eDjango 6.0 and 5.2 are now in partial support mode.\nDjango 5.1 and 5.0 support was dropped (techically they would still work, but we don't test them no more).\nPython 3.10 support was dropped.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBootstrap Django 6.1 by \u003ca href=\"https://github.com/ngnpope\"\u003e\u003ccode\u003e@​ngnpope\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3563\"\u003etypeddjango/django-stubs#3563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependency django to v5.2.17 by \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3575\"\u003etypeddjango/django-stubs#3575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExplicit through default manager by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3576\"\u003etypeddjango/django-stubs#3576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport custom arguments in queryset update methods by \u003ca href=\"https://github.com/WhyNotHugo\"\u003e\u003ccode\u003e@​WhyNotHugo\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3586\"\u003etypeddjango/django-stubs#3586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVersion 6.1.0 by \u003ca href=\"https://github.com/sobolevn\"\u003e\u003ccode\u003e@​sobolevn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3589\"\u003etypeddjango/django-stubs#3589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeedback is very welcome! 👍\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.9...6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.9\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e6.0.8\u003c/code\u003e was supposed to be the last \u003ccode\u003e6.0.x\u003c/code\u003e release, but we found several regressions that we wanted to fix.\nNow we are working on \u003ccode\u003e6.1.0\u003c/code\u003e release :)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetect every generic stub class in the generic consistency test by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3572\"\u003etypeddjango/django-stubs#3572\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon't crash on a many-to-many through model that can't be resolved by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3571\"\u003etypeddjango/django-stubs#3571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\"\u003ehttps://github.com/typeddjango/django-stubs/compare/6.0.8...6.0.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.8\u003c/h2\u003e\n\u003cp\u003eThis is the last release with Django 6.0 full support.\nThe next release will be focused on Django 6.1 support with Django 6.0 partial support.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003econtrib.gis\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3500\"\u003etypeddjango/django-stubs#3500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplicit M2M through models lose their \u003ccode\u003eobjects\u003c/code\u003e / \u003ccode\u003e_default_manager\u003c/code\u003e attributes by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3499\"\u003etypeddjango/django-stubs#3499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve dynamic manager methods via mypy's \u003ccode\u003efind_member\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3501\"\u003etypeddjango/django-stubs#3501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edb.models\u003c/code\u003e, \u003ccode\u003ecore\u003c/code\u003e and \u003ccode\u003emigrations\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3504\"\u003etypeddjango/django-stubs#3504\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow callables returning Choices type for Field.choices. by \u003ca href=\"https://github.com/felixxm\"\u003e\u003ccode\u003e@​felixxm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3506\"\u003etypeddjango/django-stubs#3506\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003ecore\u003c/code\u003e, \u003ccode\u003eapps\u003c/code\u003e, \u003ccode\u003eurls\u003c/code\u003e and \u003ccode\u003eadmindocs\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3503\"\u003etypeddjango/django-stubs#3503\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove type in \u003ccode\u003eforms\u003c/code\u003e and improve types of lazy regexes by \u003ca href=\"https://github.com/01xnikhil\"\u003e\u003ccode\u003e@​01xnikhil\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3293\"\u003etypeddjango/django-stubs#3293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003edjango.tasks\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3512\"\u003etypeddjango/django-stubs#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd plugin support for \u003ccode\u003eapps.get_model()\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3511\"\u003etypeddjango/django-stubs#3511\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in admin filters, utils and per-app admins by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3502\"\u003etypeddjango/django-stubs#3502\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInvalidate mypy cache when \u003ccode\u003esettings.INSTALLED_APPS\u003c/code\u003e change and cache full config computation by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3514\"\u003etypeddjango/django-stubs#3514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark fullnames constants as Final by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3515\"\u003etypeddjango/django-stubs#3515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd type arguments to generic references in \u003ccode\u003eutils\u003c/code\u003e and \u003ccode\u003etemplates\u003c/code\u003e by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3513\"\u003etypeddjango/django-stubs#3513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse mypy's \u003ccode\u003elookup_fully_qualified\u003c/code\u003e instead of custom symbol lookup by \u003ca href=\"https://github.com/UnknownPlatypus\"\u003e\u003ccode\u003e@​UnknownPlatypus\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/pull/3519\"\u003etypeddjango/django-stubs#3519\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/typeddjango/django-stubs/commit/2ec3fd3ce48e7a92cbe09a114d512dcea50571f7\"\u003e\u003ccode\u003e2ec3fd3\u003c/code\u003e\u003c/a\u003e Version 6.1.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3589\"\u003e#3589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5868773c9fa5ba236c2cc263799a02acc67f7c0b\"\u003e\u003ccode\u003e5868773\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.69.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3588\"\u003e#3588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e888491e34e5b9073f1c09eb84e91ed7ce36c775\"\u003e\u003ccode\u003ee888491\u003c/code\u003e\u003c/a\u003e Support custom arguments in queryset update methods (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3586\"\u003e#3586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ffd15cac28c39690acd98c3f9af9370f9fadedce\"\u003e\u003ccode\u003effd15ca\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3583\"\u003e#3583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/1af6dcf52f19837fdc47b26350d351dea0a139c1\"\u003e\u003ccode\u003e1af6dcf\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.68.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/709e864c79e03239be2234457f59eb66ce69e3c7\"\u003e\u003ccode\u003e709e864\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.69 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3580\"\u003e#3580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/5da937c127b581501b5707b547d861b46d8af41c\"\u003e\u003ccode\u003e5da937c\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.68 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3579\"\u003e#3579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/7afd2da77ed93d0b3164ea4d203648a6c972f161\"\u003e\u003ccode\u003e7afd2da\u003c/code\u003e\u003c/a\u003e Update dependency ty to v0.0.67 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/07e22f2e4918163d1f3aa1137142cf281b5fbcb1\"\u003e\u003ccode\u003e07e22f2\u003c/code\u003e\u003c/a\u003e Explicit through default manager (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3576\"\u003e#3576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/db47c3b32275b6d6abef915303fd80fde3dd59da\"\u003e\u003ccode\u003edb47c3b\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.17 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3575\"\u003e#3575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.6...6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `djlint` from 1.40.0 to 1.44.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/djlint/djLint/releases\"\u003edjlint's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.44.2\u003c/h2\u003e\n\u003ch3\u003eFix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eH037\u003c/code\u003e no longer reports two attributes whose names differ only before a \u003ccode\u003e.\u003c/code\u003e as duplicates (\u003ccode\u003edata-a.checked\u003c/code\u003e and \u003ccode\u003edata-b.checked\u003c/code\u003e, or alpine's \u003ccode\u003ex-on:click.prevent\u003c/code\u003e and \u003ccode\u003ex-on:keyup.prevent\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAn attribute whose name merely ends in the name a rule looks for is no longer mistaken for it. \u003ccode\u003edata-alt\u003c/code\u003e and \u003ccode\u003edata-x.alt\u003c/code\u003e left \u003ccode\u003eH013\u003c/code\u003e silent on an image with no \u003ccode\u003ealt\u003c/code\u003e, ...\n\n_Description has been truncated_","html_url":"https://github.com/MarcoCS2007/gtreinos/pull/27","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarcoCS2007%2Fgtreinos/issues/27","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/27/packages"}}]}