{"id":3322,"name":"pymupdf","ecosystem":"pip","repository_url":"https://github.com/pymupdf/pymupdf","issues_count":416,"created_at":"2025-06-06T16:30:10.579Z","updated_at":"2025-06-06T16:30:10.579Z","purl":"pkg:pypi/pymupdf","metadata":{"id":2877079,"name":"pymupdf","ecosystem":"pypi","description":"A high performance Python library for data extraction, analysis, conversion \u0026 manipulation of PDF (and other) documents.","homepage":null,"licenses":"Dual Licensed - GNU AFFERO GPL 3.0 or Artifex Commercial License","normalized_licenses":["AGPL-3.0","PolyForm-Noncommercial-1.0.0"],"repository_url":"https://github.com/pymupdf/pymupdf","keywords_array":[],"namespace":null,"versions_count":132,"first_release_published_at":"2022-10-31T21:52:32.000Z","latest_release_published_at":"2025-05-22T16:07:55.000Z","latest_release_number":"1.26.0","last_synced_at":"2025-06-04T20:01:16.625Z","created_at":"2022-04-10T12:15:36.315Z","updated_at":"2025-06-04T20:01:16.626Z","registry_url":"https://pypi.org/project/pymupdf/","install_command":"pip install pymupdf --index-url https://pypi.org/simple","documentation_url":"https://pymupdf.readthedocs.io/","metadata":{"funding":null,"documentation":"https://pymupdf.readthedocs.io/","classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","Intended Audience :: Information Technology","Operating System :: MacOS","Operating System :: Microsoft :: Windows","Operating System :: POSIX :: Linux","Programming Language :: C","Programming Language :: C++","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: Implementation :: CPython","Topic :: Multimedia :: Graphics","Topic :: Software Development :: Libraries","Topic :: Utilities"],"normalized_name":"pymupdf"},"repo_metadata":{"id":4948451,"uuid":"6105714","full_name":"pymupdf/PyMuPDF","owner":"pymupdf","description":"PyMuPDF is a high performance Python library for data extraction, analysis, conversion \u0026 manipulation of PDF (and other) documents.","archived":false,"fork":false,"pushed_at":"2025-06-01T16:31:18.000Z","size":347598,"stargazers_count":7275,"open_issues_count":43,"forks_count":611,"subscribers_count":68,"default_branch":"main","last_synced_at":"2025-06-02T00:25:16.493Z","etag":null,"topics":["data-science","epub","extract-data","font","mupdf","ocr","pdf","pdf-documents","pymupdf","python","table-extraction","tesseract","text-processing","text-shaping","xps"],"latest_commit_sha":null,"homepage":"https://pymupdf.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"redguide/nodejs","license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pymupdf.png","metadata":{"files":{"readme":"README.md","changelog":"changes.txt","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/supported-files-table.rst","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2012-10-06T18:54:25.000Z","updated_at":"2025-06-01T23:25:25.000Z","dependencies_parsed_at":"2023-02-17T09:01:09.658Z","dependency_job_id":"ed70896b-d970-4827-a6dd-a96eea8c5fcd","html_url":"https://github.com/pymupdf/PyMuPDF","commit_stats":{"total_commits":2533,"total_committers":77,"mean_commits":"32.896103896103895","dds":0.5542834583497829,"last_synced_commit":"63a3a08a379d75af8e7c95f107d402fb0b52d252"},"previous_names":[],"tags_count":169,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pymupdf","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":257626933,"owners_count":22575101,"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":"pymupdf","name":"PyMuPDF","uuid":"48152365","kind":"organization","description":"This represents the central repository, PyMuPDF and related repositories","email":null,"website":"https://pymupdf.io","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/48152365?v=4","repositories_count":10,"last_synced_at":"2024-03-26T19:19:44.835Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/pymupdf","funding_links":[],"total_stars":4314,"followers":80,"following":0,"created_at":"2022-11-04T06:46:41.753Z","updated_at":"2024-03-26T19:19:48.290Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pymupdf","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pymupdf/repositories"},"tags":[{"name":"1.26.0","sha":"96d2ebef474c8a739fd74d970e2c201e07b1bd7e","kind":"commit","published_at":"2025-05-22T10:25:06.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.26.0","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.26.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.26.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.26.0/manifests"},{"name":"1.25.5","sha":"b1ecfe60f99e2ac7d182c974402703246a0c9714","kind":"commit","published_at":"2025-03-31T16:32:24.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.25.5","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.25.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.25.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.25.5/manifests"},{"name":"1.25.4","sha":"05b0cfa1fc7bfa83308e9b33f4ca5122f83faacc","kind":"commit","published_at":"2025-03-14T17:00:48.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.25.4","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.25.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.25.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.25.4/manifests"},{"name":"1.25.3","sha":"d84e90c3d9048f060ebc356e6aefdf33a5644624","kind":"commit","published_at":"2025-02-06T11:01:03.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.25.3","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.25.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.25.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.25.3/manifests"},{"name":"1.25.2","sha":"ad4b871489099fbc7d1263c15177c92271b4eab7","kind":"commit","published_at":"2025-01-17T13:44:45.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.25.2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.25.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.25.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.25.2/manifests"},{"name":"1.25.1","sha":"b0011aa7bffb7127a8c031e7f0ef81b76d30bbda","kind":"commit","published_at":"2024-12-11T16:17:20.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.25.1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.25.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.25.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.25.1/manifests"},{"name":"1.25.0","sha":"2f7ef3dba26cafc276319617b4ef6ae2abd8367b","kind":"commit","published_at":"2024-12-05T20:40:38.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.25.0","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.25.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.25.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.25.0/manifests"},{"name":"1.24.14","sha":"ebabd6f5335708b4a9625b9d516336bc80525d43","kind":"commit","published_at":"2024-11-19T00:58:29.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.14","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.14","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.14","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.14/manifests"},{"name":"1.24.13","sha":"214616dbf127010cc26c57c265643b84a0d738d5","kind":"commit","published_at":"2024-10-29T14:15:19.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.13","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.13/manifests"},{"name":"1.24.12","sha":"96bd921234c036dee37df3e5572517f2c99fe9a7","kind":"commit","published_at":"2024-10-21T13:11:51.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.12","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.12","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.12/manifests"},{"name":"1.24.11","sha":"eeaa3f17c1e32df1c9560b74dcd05fbf49649ddd","kind":"commit","published_at":"2024-10-03T19:25:50.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.11","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.11/manifests"},{"name":"1.24.10","sha":"ee09bb5925d312ba36e1025a4b7dea7ff9afcec5","kind":"commit","published_at":"2024-09-02T14:31:04.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.10","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.10/manifests"},{"name":"1.24.9","sha":"9717935eeb2d50d15440d62575878214226795f9","kind":"commit","published_at":"2024-07-24T20:14:57.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.9","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.9/manifests"},{"name":"1.24.8","sha":"e4420d11205f5758fda9532c1be503318b264da1","kind":"commit","published_at":"2024-07-22T21:00:07.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.8","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.8/manifests"},{"name":"1.24.7","sha":"c1c556478ecd9f410f94ce12536bf1752ade5598","kind":"commit","published_at":"2024-06-26T11:35:21.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.7","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.7/manifests"},{"name":"1.24.6","sha":"99b414a695d4ac3565627c1d709b0b7c1425ff2d","kind":"commit","published_at":"2024-06-25T10:25:33.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.6","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.6/manifests"},{"name":"1.24.5","sha":"ec4497b150189d5747c1b47aa4076d24a3c27874","kind":"commit","published_at":"2024-05-30T17:39:59.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.5","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.5/manifests"},{"name":"1.24.4","sha":"74a368b4261fa30bcefa52508ac21fde17fbb8e4","kind":"commit","published_at":"2024-05-16T08:37:39.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.4","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.4/manifests"},{"name":"1.24.3","sha":"5bcc16e6ee52877965df2fb0ad60b518e860b97d","kind":"commit","published_at":"2024-05-09T16:27:05.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.3","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.3/manifests"},{"name":"1.24.2","sha":"272bbe2d2685f1cfce9d079b2db0280c35d998ec","kind":"commit","published_at":"2024-04-17T18:21:23.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.2/manifests"},{"name":"1.24.1","sha":"055832f66f26791de662a437b4660ad80e950c88","kind":"commit","published_at":"2024-04-02T13:31:45.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.1/manifests"},{"name":"1.24.0","sha":"1118f0225f459d237db06c3bbac285d00bac12ae","kind":"commit","published_at":"2024-03-21T17:02:36.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.24.0","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.24.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.24.0/manifests"},{"name":"1.23.26","sha":"a868c0a556e39198549e4e139534bb12b2623c5d","kind":"commit","published_at":"2024-02-29T15:52:26.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.26","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.26","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.26","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.26/manifests"},{"name":"1.23.25","sha":"c64b7dd059d18dbfbc949f64cb4529c74af0bb2f","kind":"commit","published_at":"2024-02-20T19:11:24.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.25","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.25","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.25","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.25/manifests"},{"name":"1.23.24","sha":"a7f92699ee5ca932f1c7e0a818f27ec6ecdc7d95","kind":"commit","published_at":"2024-02-19T21:31:02.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.24","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.24","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.24","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.24/manifests"},{"name":"1.23.23","sha":"01b9606af192fd8a72467c07190a2a80763ae0c5","kind":"commit","published_at":"2024-02-18T21:13:51.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.23","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.23","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.23","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.23/manifests"},{"name":"1.23.22","sha":"d7d5937853d73a17dcb24229d3220a47931e6f7e","kind":"commit","published_at":"2024-02-12T22:11:55.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.22","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.22","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.22","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.22/manifests"},{"name":"1.23.21","sha":"4d604d6d2ddeacd88c321648412e4cc3b0401fde","kind":"commit","published_at":"2024-02-01T18:53:35.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.21","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.21","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.21","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.21/manifests"},{"name":"1.23.20","sha":"0a63b9c00459aa59b597d98e52a5c15288f88dc8","kind":"commit","published_at":"2024-01-29T15:53:51.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.20","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.20","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.20","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.20/manifests"},{"name":"1.23.19","sha":"82282b3efffa6fc240fca954e9f46d333f335d9a","kind":"commit","published_at":"2024-01-25T17:27:24.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.19","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.19","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.19","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.19/manifests"},{"name":"1.23.18","sha":"9e056c5676c8de2840fd5b3f640c6dcc8e8867d8","kind":"commit","published_at":"2024-01-23T18:31:27.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.18","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.18","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.18","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.18/manifests"},{"name":"1.23.17","sha":"b51cd75d7251347c6db7ef81586decb56e9111f6","kind":"commit","published_at":"2024-01-22T20:38:52.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.17","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.17","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.17","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.17/manifests"},{"name":"1.23.16","sha":"e97b5bb72363667bb94e671d67a65db14477283b","kind":"commit","published_at":"2024-01-18T16:38:25.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.16","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.16","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.16","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.16/manifests"},{"name":"1.23.15","sha":"7ece7c316cf80734c663a62ea01a19ca9df075d4","kind":"commit","published_at":"2024-01-16T16:21:03.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.15","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.15","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.15","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.15/manifests"},{"name":"1.23.14","sha":"96569bd2e1bb149522a1c98ed9d1c1fd3f4dd494","kind":"commit","published_at":"2024-01-15T17:23:35.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.14","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.14","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.14","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.14/manifests"},{"name":"1.23.13","sha":"c17b0f2c9a9e5002058673d0d87700522b2c2adc","kind":"commit","published_at":"2024-01-15T10:56:42.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.13","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.13/manifests"},{"name":"1.23.12","sha":"34661b3fc67657a71526704b9485948dd650c56b","kind":"commit","published_at":"2024-01-12T19:35:39.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.12","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.12","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.12/manifests"},{"name":"1.23.11","sha":"516368febf5fcb6701a076c0ae5c6294a322d3a1","kind":"commit","published_at":"2024-01-12T13:43:32.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.11","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.11/manifests"},{"name":"1.23.10","sha":"dfea00060860972ef46a79948a9908ac4172f0c3","kind":"commit","published_at":"2024-01-12T10:21:16.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.10","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.10/manifests"},{"name":"1.23.9","sha":"b2aa3309644c8dbd6ed2ac4f4ec1bafed78c7f12","kind":"commit","published_at":"2024-01-11T09:56:11.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.9","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.9/manifests"},{"name":"1.23.9rc2","sha":"59e78667a28e87839bea47b7a337f83bccc2a8f7","kind":"commit","published_at":"2024-01-08T16:21:13.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.9rc2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.9rc2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.9rc2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.9rc2/manifests"},{"name":"1.23.9rc1","sha":"b8879fef19452c3987c554f08b44c04a67e255f0","kind":"commit","published_at":"2024-01-02T14:57:01.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.9rc1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.9rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.9rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.9rc1/manifests"},{"name":"1.23.8","sha":"328f7eeb0b81ca61068e715118019e674da696bf","kind":"commit","published_at":"2023-12-19T11:29:52.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.8","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.8/manifests"},{"name":"1.23.7","sha":"bde223b194907e349f0a9ce495dd874bf77be3eb","kind":"commit","published_at":"2023-11-30T10:34:20.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.7","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.7/manifests"},{"name":"1.23.6","sha":"fb67864f80f6104be7df0bf2d2386b90e7e5af8d","kind":"commit","published_at":"2023-11-06T17:59:21.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.6","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.6/manifests"},{"name":"1.23.5","sha":"394ab53e4c043b08f2d4144248051f8f2ccac324","kind":"commit","published_at":"2023-10-12T16:07:24.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.5","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.5/manifests"},{"name":"1.23.4","sha":"3ca9d3dcd84e8603c584f69e4d8f5cb582121f62","kind":"commit","published_at":"2023-09-26T20:37:07.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.4","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.4/manifests"},{"name":"1.23.3","sha":"1a3a06e347941ba68330a3d7a4b06f94ae3c0452","kind":"commit","published_at":"2023-08-31T19:37:22.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.3","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.3/manifests"},{"name":"1.23.2","sha":"f7ca6e783e79ab92baff5f72cc30f65e52a7e2fa","kind":"commit","published_at":"2023-08-28T09:16:47.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.2/manifests"},{"name":"1.23.1","sha":"d5a8b79d9fc96ed6fc42a16314abcc71711a65b9","kind":"commit","published_at":"2023-08-24T10:40:05.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.1/manifests"},{"name":"1.23.0","sha":"4077e5b04fb3c2dcf2514a251e15bc0c99ee1658","kind":"commit","published_at":"2023-08-22T21:29:18.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.0","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.0/manifests"},{"name":"1.23.0rc2_b","sha":"defa1be6851732531b2145ac8eeec6438e8107e8","kind":"commit","published_at":"2023-08-21T10:41:41.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.0rc2_b","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.0rc2_b","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.0rc2_b","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.0rc2_b/manifests"},{"name":"1.23.0rc2","sha":"74ef96dd6f988b669c675ea1e682f5dfd04591f2","kind":"commit","published_at":"2023-08-19T16:35:03.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.0rc2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.0rc2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.0rc2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.0rc2/manifests"},{"name":"1.23.0rc1","sha":"e8b0e09f9e8ae3fa75bc57a563ca032b3a2d9555","kind":"commit","published_at":"2023-08-10T09:52:26.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.23.0rc1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.23.0rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.0rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.23.0rc1/manifests"},{"name":"1.22.5","sha":"e6798724bfd0ef77134d317e57c9cd0fceaa4cb4","kind":"commit","published_at":"2023-06-21T18:14:21.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.22.5","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.22.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.22.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.22.5/manifests"},{"name":"1.22.3","sha":"0368e56cfa6afb55bcf6c726e7f51a2a16a5ccba","kind":"commit","published_at":"2023-05-10T20:57:14.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.22.3","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.22.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.22.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.22.3/manifests"},{"name":"1.22.2","sha":"f26c4b55feb3a7c7843a0e0486c8506ea109a6a1","kind":"commit","published_at":"2023-04-26T08:09:42.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.22.2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.22.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.22.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.22.2/manifests"},{"name":"1.22.1","sha":"858d0231021f25636a773a39a974d82213df1c04","kind":"commit","published_at":"2023-04-18T13:51:50.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.22.1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.22.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.22.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.22.1/manifests"},{"name":"1.22.0","sha":"a79522a9e44d1da3cb5bd79eeb7cf2df04c4dd94","kind":"commit","published_at":"2023-04-14T13:21:26.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.22.0","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.22.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.22.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.22.0/manifests"},{"name":"1.21.1","sha":"0f01aafb9514be278b301c0f1b00d88209b01ac6","kind":"commit","published_at":"2022-12-13T11:21:36.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.21.1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.21.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.21.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.21.1/manifests"},{"name":"1.21.1rc1","sha":"5973cc7a986c92df42897f22af9e80ca84764c5d","kind":"commit","published_at":"2022-12-12T21:08:19.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.21.1rc1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.21.1rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.21.1rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.21.1rc1/manifests"},{"name":"1.21.0","sha":"536033e716bf3790ad77657dd9b43763144d9264","kind":"commit","published_at":"2022-11-08T12:14:35.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.21.0","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.21.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.21.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.21.0/manifests"},{"name":"1.21.0rc2","sha":"69959716b3886089105adb6b561efa657369ba98","kind":"commit","published_at":"2022-11-07T18:21:52.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.21.0rc2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.21.0rc2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.21.0rc2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.21.0rc2/manifests"},{"name":"1.21.0rc1","sha":"82023071b5f7524ac2523224fa431c54a19d6a5f","kind":"commit","published_at":"2022-10-31T17:32:50.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.21.0rc1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.21.0rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.21.0rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.21.0rc1/manifests"},{"name":"1.20.2","sha":"309223aa84eb7209194f76ee4f9a138f90ed9bd0","kind":"commit","published_at":"2022-08-13T05:57:45.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.20.2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.20.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.20.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.20.2/manifests"},{"name":"1.20.1","sha":"5999e1fb94fd5ee0fb6b1bda0de553001b737a31","kind":"commit","published_at":"2022-06-27T10:49:40.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.20.1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.20.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.20.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.20.1/manifests"},{"name":"1.20.0","sha":"98402d5878c2790865b921ff0ef488b49a7d1ffc","kind":"commit","published_at":"2022-06-16T20:54:35.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.20.0","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.20.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.20.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.20.0/manifests"},{"name":"1.20.0rc2","sha":"af9f41def1eb1d2241f6b9e705fd85767e16c68c","kind":"commit","published_at":"2022-06-15T23:55:19.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.20.0rc2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.20.0rc2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.20.0rc2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.20.0rc2/manifests"},{"name":"1.20.0rc1","sha":"43a323087971dc3df13f4ddcd08dcb848aea13b6","kind":"commit","published_at":"2022-06-15T23:55:19.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.20.0rc1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.20.0rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.20.0rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.20.0rc1/manifests"},{"name":"1.19.6","sha":"2eaac63043e3fdf4a0c913a03dd51c1dfdddac38","kind":"commit","published_at":"2022-03-05T08:52:45.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.19.6","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.19.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.6/manifests"},{"name":"1.19.5","sha":"389e9476775377c99db55f85ccb361f74dd48f2d","kind":"commit","published_at":"2022-02-03T22:26:21.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.19.5","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.19.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.5/manifests"},{"name":"1.19.4","sha":"6b3c598a4132b0a2a3f7bdf3fd014b9d285002b2","kind":"commit","published_at":"2022-01-01T17:21:30.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.19.4","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.19.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.4/manifests"},{"name":"1.19.3","sha":"521640a8ee586abefb123340b72f1765c85908bd","kind":"commit","published_at":"2021-12-12T11:15:28.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.19.3","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.19.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.3/manifests"},{"name":"1.19.2","sha":"b929ea717c2e7e1e31b7e8aa20c711c30078841d","kind":"commit","published_at":"2021-11-20T07:30:57.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.19.2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.19.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.2/manifests"},{"name":"1.19.1","sha":"dd0518f89d17809ac0dbe4a52ad7397a0a0a95fc","kind":"commit","published_at":"2021-10-24T10:44:31.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.19.1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.19.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.1/manifests"},{"name":"1.19.0","sha":"884f3816fe7ec03952b51987703689912627e9b1","kind":"commit","published_at":"2021-10-17T10:13:53.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.19.0","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.19.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.19.0/manifests"},{"name":"1.18.19","sha":"d206ef793676657972744b5f927f70772b54a7e2","kind":"commit","published_at":"2021-09-16T22:01:15.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.19","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.19","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.19","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.19/manifests"},{"name":"1.18.18","sha":"b32abc733eced0faaa340a80e0dbdea3b6ea40fc","kind":"commit","published_at":"2021-09-16T15:59:11.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.18","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.18","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.18","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.18/manifests"},{"name":"1.18.17","sha":"0c839a2b67dcadb8c20ce72e5a4bca877d7dcda1","kind":"commit","published_at":"2021-08-24T09:52:56.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.17","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.17","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.17","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.17/manifests"},{"name":"1.18.16","sha":"be074d5f9601805f94e64751c598a1d035008622","kind":"commit","published_at":"2021-08-07T20:02:56.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.16","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.16","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.16","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.16/manifests"},{"name":"1.18.15","sha":"d7f55b35c8157ed20924de5d5fe543f34f1c05f5","kind":"commit","published_at":"2021-07-10T21:29:37.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.15","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.15","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.15","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.15/manifests"},{"name":"1.18.14","sha":"c9a17d771150577c726f41f46de722218d64f5bd","kind":"commit","published_at":"2021-06-01T12:46:15.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.14","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.14","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.14","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.14/manifests"},{"name":"1.18.13","sha":"ce06352964ac4d6dce039b93181a54868290ef5c","kind":"commit","published_at":"2021-05-05T12:29:59.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.13","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.13/manifests"},{"name":"1.18.11","sha":"8537b18ef959be7d09b54ba126c8cd821c4a6213","kind":"commit","published_at":"2021-04-10T11:55:42.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.11","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.11/manifests"},{"name":"1.18.10","sha":"f9740b57b634653fa5d8423dc7db622fb1e6ed6e","kind":"commit","published_at":"2021-03-22T12:24:35.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.10","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.10/manifests"},{"name":"1.18.9","sha":"78c1310166cd43dca0dad839b5faecf0075772e7","kind":"commit","published_at":"2021-02-26T22:49:54.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.9","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.9/manifests"},{"name":"1.18.8","sha":"444b5eb14bc49119a3abedab85f982147a3012b1","kind":"commit","published_at":"2021-02-04T21:13:21.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.8","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.8/manifests"},{"name":"1.18.7","sha":"4cc565c36b1640ce642c965df973257e3b257cf3","kind":"commit","published_at":"2021-02-02T20:37:28.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.7","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.7/manifests"},{"name":"1.18.6","sha":"a7a3a710fe8cb36e1b4aeac804effd60451ccd53","kind":"commit","published_at":"2021-01-07T13:41:48.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.6","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.6/manifests"},{"name":"1.18.5","sha":"bfb30b4f0b8eda412c00ccead29ed0f8e6445db7","kind":"commit","published_at":"2020-12-17T10:35:11.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.5","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.5/manifests"},{"name":"1.18.4","sha":"0bd50c3e61b1c1a6bd0e395c467e73a1aec793c6","kind":"commit","published_at":"2020-11-20T16:24:57.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.4","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.4/manifests"},{"name":"1.18.3","sha":"c207aaa33837949e94af2887085721a2f724711e","kind":"commit","published_at":"2020-11-09T12:15:53.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.3","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.3/manifests"},{"name":"1.18.2","sha":"071c56d13dc1c27a421b9bbcbc9b0d91b3e68dc6","kind":"commit","published_at":"2020-10-27T11:59:36.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.2/manifests"},{"name":"1.18.1","sha":"080071b9ead03538369105f6bd583f9720a80e93","kind":"commit","published_at":"2020-10-18T16:50:21.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.1/manifests"},{"name":"1.18.0","sha":"a3d4ac007f6934231e18f27ed844c8f686234b36","kind":"commit","published_at":"2020-10-08T06:54:26.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.18.0","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.18.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.18.0/manifests"},{"name":"1.17.7","sha":"b49650bbfc24cfd2b8de6245e33fc446e7c732ef","kind":"commit","published_at":"2020-09-14T11:05:45.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.17.7","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.17.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.7/manifests"},{"name":"1.17.6","sha":"10341cea796e8cbde86959a590d87b2596c27085","kind":"commit","published_at":"2020-08-26T19:24:55.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.17.6","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.17.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.6/manifests"},{"name":"1.17.5","sha":"d66c6aee4d540dca33d5b6f55c235a37df70f21e","kind":"commit","published_at":"2020-08-06T13:02:05.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.17.5","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.17.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.5/manifests"},{"name":"1.17.4","sha":"12d0201fdcea6854d04dc40ca52ebd9c0724723f","kind":"commit","published_at":"2020-07-23T22:43:58.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.17.4","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.17.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.4/manifests"},{"name":"1.17.3","sha":"34289285de435b09a4d9626eec76b932a67114a9","kind":"commit","published_at":"2020-07-07T08:59:04.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.17.3","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.17.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.3/manifests"},{"name":"1.17.2","sha":"eb1a43df875b483c9e07ab813d9eb97f137491b1","kind":"commit","published_at":"2020-06-24T14:01:52.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.17.2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.17.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.2/manifests"},{"name":"1.17.1","sha":"363db5155824e30f720559d255d11a5b1c0e61b7","kind":"commit","published_at":"2020-06-18T16:29:59.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.17.1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.17.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.1/manifests"},{"name":"1.17.0","sha":"9a6a8a69d76cb6a44ca190e686ff4e781ca4ebb3","kind":"commit","published_at":"2020-05-19T13:02:41.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.17.0","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.17.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.17.0/manifests"},{"name":"1.16.18","sha":"3765f175988bb109601c24ad9f8b291211de02bf","kind":"commit","published_at":"2020-04-23T10:06:34.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.18","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.18","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.18","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.18/manifests"},{"name":"1.16.17","sha":"34d08bd1aeaecee845834e81be5fc024c291d7e2","kind":"commit","published_at":"2020-04-09T09:52:29.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.17","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.17","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.17","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.17/manifests"},{"name":"1.16.16","sha":"05b3baf76dd00c00200caa425d6e012ab2673bf3","kind":"commit","published_at":"2020-03-29T14:45:34.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.16","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.16","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.16","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.16/manifests"},{"name":"1.16.14","sha":"73bc7644e5564c3bdfe9ee3499a3ed40ffd486c3","kind":"commit","published_at":"2020-03-25T18:14:43.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.14","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.14","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.14","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.14/manifests"},{"name":"1.16.13","sha":"8af219a8086afa44575ceef4ccb109344e7711b7","kind":"commit","published_at":"2020-03-16T07:06:04.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.13","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.13/manifests"},{"name":"1.16.12","sha":"c876582c2297b0996af88f20107f1361fbbfa34b","kind":"commit","published_at":"2020-03-12T11:00:47.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.12","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.12","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.12/manifests"},{"name":"1.16.11","sha":"6c34386b18545d522dd71ab2762f4bbcd5b618a8","kind":"commit","published_at":"2020-02-23T11:45:09.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.11","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.11/manifests"},{"name":"1.16.10","sha":"7141e187969e2c4fe122c5399525d7b34dcc3604","kind":"commit","published_at":"2019-12-21T16:20:38.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.10","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.10/manifests"},{"name":"1.16.9","sha":"a5c578bccae569cec9b7ac368f301dd24f08d7f8","kind":"commit","published_at":"2019-12-05T23:57:53.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.9","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.9/manifests"},{"name":"1.16.8","sha":"bb102ee539798063cb4edb1a2580357138565f11","kind":"commit","published_at":"2019-11-18T23:13:55.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.8","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.8/manifests"},{"name":"1.16.7","sha":"6f9a8fbed12b02337ea5abaa5dd076b86761bd2c","kind":"commit","published_at":"2019-11-08T17:27:43.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.7","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.7/manifests"},{"name":"1.16.6","sha":"e095b046ed2b1fd8e037d6284de4abeb82df5c3a","kind":"commit","published_at":"2019-11-02T20:07:22.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.6","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.6/manifests"},{"name":"1.16.5","sha":"5c7c36e2743b1c748d4189e79ccf085c722bfca1","kind":"commit","published_at":"2019-10-14T10:31:29.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.5","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.5/manifests"},{"name":"1.16.4","sha":"61f7116ce38c98f31c2429ec9e5b8c944344e9e8","kind":"commit","published_at":"2019-10-10T14:13:28.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.4","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.4/manifests"},{"name":"1.16.3","sha":"4368d399d8b99b6b7aaf6fb29eef1781485bc928","kind":"commit","published_at":"2019-10-01T14:34:28.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.3","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.3/manifests"},{"name":"1.16.2","sha":"260eced0655547e939098e9f66e6b512045b773c","kind":"commit","published_at":"2019-09-13T00:00:48.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.2/manifests"},{"name":"1.16.1","sha":"58ba5224dd89332b4f256f131ef504de2f57af87","kind":"commit","published_at":"2019-09-04T05:04:40.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.1/manifests"},{"name":"1.16.0","sha":"fb8c68d223663676a37b90bf4a6be392fd26922e","kind":"commit","published_at":"2019-08-26T06:41:19.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.16.0","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.16.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.16.0/manifests"},{"name":"1.14.20","sha":"1e6efbc6830d27a220026d1685de27a9d39cf458","kind":"commit","published_at":"2019-08-11T07:15:27.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.20","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.20","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.20","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.20/manifests"},{"name":"1.14.19","sha":"c3995dbb885f8167a2bd4f848305f6f6c5e34a9b","kind":"commit","published_at":"2019-07-19T08:55:47.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.19","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.19","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.19","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.19/manifests"},{"name":"1.14.18","sha":"8647e0ad30580723bbd1e4baa749d8c878ded340","kind":"commit","published_at":"2019-07-17T21:55:38.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.18","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.18","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.18","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.18/manifests"},{"name":"1.14.17","sha":"5ab7559563bb2adf02f77f2818cb537ca2b1681f","kind":"commit","published_at":"2019-07-05T15:40:53.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.17","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.17","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.17","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.17/manifests"},{"name":"1.14.16","sha":"878657bc1b43f2d831705c6f64298c6f7476999b","kind":"commit","published_at":"2019-05-29T07:43:47.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.16","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.16","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.16","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.16/manifests"},{"name":"1.14.15","sha":"73e0c99340cf5977f5df0a49e659cd643fa7d627","kind":"commit","published_at":"2019-05-22T21:18:41.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.15","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.15","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.15","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.15/manifests"},{"name":"1.14.14","sha":"917f2d83482510e26ba0ff01fd2392c26f3a8e90","kind":"commit","published_at":"2019-04-09T22:44:29.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.14","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.14","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.14","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.14/manifests"},{"name":"1.14.13","sha":"46466302669f03f5e57724d549ae73ae71550532","kind":"commit","published_at":"2019-04-07T11:09:49.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.13","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.13/manifests"},{"name":"1.14.12","sha":"672a44ca088c31706c52b9bb01504fe75fd2b3d6","kind":"commit","published_at":"2019-03-21T17:43:08.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.12","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.12","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.12/manifests"},{"name":"1.14.11","sha":"5cae163a10790ee4da99192bc5ae81f674b7069c","kind":"commit","published_at":"2019-03-18T13:34:27.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.11","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.11/manifests"},{"name":"1.14.10","sha":"52a2d347fb6c46afc45752ebf22add0d956c5a3e","kind":"commit","published_at":"2019-03-10T17:00:25.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.10","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.10/manifests"},{"name":"1.14.9","sha":"222b4d0f856177b4493df7d22eb10e145c9336e4","kind":"commit","published_at":"2019-03-06T23:27:45.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.9","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.9/manifests"},{"name":"1.14.8","sha":"b5c8e0454dba9b6cfe2e70bcb52638f59c469970","kind":"commit","published_at":"2019-01-31T02:42:05.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.8","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.8/manifests"},{"name":"1.14.7","sha":"70691fcef56cb56d37adf21e5efed61e25caa9ab","kind":"commit","published_at":"2019-01-17T21:59:37.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.7","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.7/manifests"},{"name":"1.14.6","sha":"ecb0fb0e51a241468f4d09e0e320ee09fc5f6b6b","kind":"commit","published_at":"2019-01-15T10:33:52.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.6","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.6/manifests"},{"name":"1.14.5","sha":"ffbbdfbda86674f9e20c4e3bb6b2c1c04261ff74","kind":"commit","published_at":"2019-01-05T09:57:51.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.5","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.5/manifests"},{"name":"1.14.4","sha":"546d88d35de62e93878592932b56f7b1fdda67ff","kind":"commit","published_at":"2018-12-18T14:44:09.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.4","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.4/manifests"},{"name":"1.14.3","sha":"efe7a8cb62cac30f54d1e0622c2a90a141a8ce3c","kind":"commit","published_at":"2018-12-02T19:30:48.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.3","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.3/manifests"},{"name":"1.14.1","sha":"3bc563245d826e3789d5804c6ee98dda4973cfce","kind":"commit","published_at":"2018-11-19T17:46:54.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.1/manifests"},{"name":"1.14.0","sha":"c9f21c087753104787a881674ecd0463bf7ac4cf","kind":"commit","published_at":"2018-11-16T19:53:31.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.14.0","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.14.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.14.0/manifests"},{"name":"1.13.20","sha":"7c3524fc9065de1f06e1f276a06435e37061cec0","kind":"commit","published_at":"2018-09-11T11:39:01.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.20","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.20","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.20","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.20/manifests"},{"name":"1.13.19","sha":"8cdaba1a36433b629b9a95894be77618f6de7870","kind":"commit","published_at":"2018-09-01T13:48:55.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.19","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.19","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.19","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.19/manifests"},{"name":"1.13.18","sha":"0835ce4f0b45782284b15362d019b05c8800438b","kind":"commit","published_at":"2018-08-24T19:24:22.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.18","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.18","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.18","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.18/manifests"},{"name":"1.13.17","sha":"48cb06599e59d1c05c7771da95bd2ac713edf9f5","kind":"commit","published_at":"2018-08-19T23:18:54.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.17","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.17","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.17","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.17/manifests"},{"name":"1.13.16","sha":"8b27f6bdd7a8c59d7bcc0709789de8cbe3df83d8","kind":"commit","published_at":"2018-08-01T21:49:29.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.16","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.16","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.16","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.16/manifests"},{"name":"1.13.15","sha":"0bd2dbf22b382e882bc548ae60681aa540d82404","kind":"commit","published_at":"2018-07-26T09:22:57.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.15","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.15","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.15","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.15/manifests"},{"name":"1.13.14","sha":"068a8fa94d4025125f56f26dff8d86b147d48c1e","kind":"commit","published_at":"2018-07-19T22:41:41.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.14","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.14","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.14","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.14/manifests"},{"name":"1.13.13","sha":"71937248fc7c45be9236c488af8fe38cf227ae4e","kind":"commit","published_at":"2018-06-27T12:56:32.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.13","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.13/manifests"},{"name":"1.13.12","sha":"ef5f490b997ddb904ad3cb815a0590510d9f098f","kind":"commit","published_at":"2018-06-20T19:20:50.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.12","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.12","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.12/manifests"},{"name":"1.13.11","sha":"bfcd8566b2259e91687ebb43e8affd82d90df8af","kind":"commit","published_at":"2018-06-20T14:55:47.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.11","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.11/manifests"},{"name":"1.13.10","sha":"fd8c27be1973519e368c2fd423850c61a2519d90","kind":"commit","published_at":"2018-06-14T12:26:51.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.10","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.10/manifests"},{"name":"1.13.9","sha":"5bf158c3354691babae374fe44cdbc644bbb90da","kind":"commit","published_at":"2018-06-09T19:47:31.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.9","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.9/manifests"},{"name":"1.13.8","sha":"ee19160f0959cd5719aebd741a4b540958dff153","kind":"commit","published_at":"2018-06-07T21:49:40.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.8","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.8/manifests"},{"name":"1.13.7","sha":"d543df985d8d6ffb3ae6d379660f52819586c1f5","kind":"commit","published_at":"2018-06-05T13:21:34.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.7","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.7/manifests"},{"name":"1.13.6","sha":"b46008a33f93f9f86834f8ac57a38b5ada7d4b73","kind":"commit","published_at":"2018-05-27T14:38:43.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.6","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.6/manifests"},{"name":"1.13.5","sha":"748394cb1d3aa604553b3e73bb12107d9599daba","kind":"commit","published_at":"2018-05-23T19:15:24.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.5","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.5/manifests"},{"name":"1.13.4","sha":"723765c3870c08f89ebf0c959571b7b8aecc4fbf","kind":"commit","published_at":"2018-05-11T17:08:04.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.4","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.4/manifests"},{"name":"1.13.3","sha":"9747acf75c987f077c6fde068041f2ad83b94c0e","kind":"commit","published_at":"2018-05-03T19:59:16.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.13.3","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.13.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.13.3/manifests"},{"name":"v1.12.6","sha":"167ee108eb85c71671890afd9a724a2b867c0e17","kind":"commit","published_at":"2018-04-02T11:18:41.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/v1.12.6","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/v1.12.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.12.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.12.6/manifests"},{"name":"v1.12.5","sha":"4c22889709676af11a41d99d2415cd7d6402247a","kind":"commit","published_at":"2018-03-29T15:34:25.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/v1.12.5","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/v1.12.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.12.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.12.5/manifests"},{"name":"v1.12.4","sha":"3ae028e71f484e29a8b294390f37768cb7c8865e","kind":"commit","published_at":"2018-03-22T16:16:13.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/v1.12.4","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/v1.12.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.12.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.12.4/manifests"},{"name":"1.12.4","sha":"92c8042f6d741b87417a121a53f4a452b59a2da2","kind":"commit","published_at":"2018-03-20T02:24:10.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/1.12.4","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/1.12.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.12.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/1.12.4/manifests"},{"name":"v1.9.2","sha":"1898563f9ddeebc5d2d73b53d99f69641e745f99","kind":"commit","published_at":"2016-08-06T13:48:20.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/v1.9.2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/v1.9.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.9.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.9.2/manifests"},{"name":"v1.9.1","sha":"4c5682ce76873e26ed27f443f1e8ccfcdf14b323","kind":"commit","published_at":"2016-05-11T12:30:57.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/v1.9.1","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/v1.9.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.9.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.9.1/manifests"},{"name":"v1.9","sha":"b0fa9d9cad7288f066299345ebe77348a58f0624","kind":"commit","published_at":"2016-05-01T08:51:47.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/v1.9","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/v1.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.9/manifests"},{"name":"v1.8","sha":"f1c48f5611a859e295b7af9d05bf1bab98032853","kind":"commit","published_at":"2015-12-06T14:58:35.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/v1.8","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/v1.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.8/manifests"},{"name":"v1.7","sha":"b2f30046b976c532781bae9c49cb29b1275472a9","kind":"commit","published_at":"2015-11-04T21:42:02.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/v1.7","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/v1.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.7/manifests"},{"name":"v1.2","sha":"53096f52e58b9431cc0d830f5935833617b3b997","kind":"tag","published_at":"2015-05-24T04:48:42.000Z","download_url":"https://codeload.github.com/pymupdf/PyMuPDF/tar.gz/v1.2","html_url":"https://github.com/pymupdf/PyMuPDF/releases/tag/v1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pymupdf%2FPyMuPDF/tags/v1.2/manifests"}]},"repo_metadata_updated_at":"2025-06-02T18:33:00.566Z","dependent_packages_count":206,"downloads":9623030,"downloads_period":"last-month","dependent_repos_count":1798,"rankings":{"downloads":0.13715623082519798,"dependent_repos_count":0.26196460153455403,"dependent_packages_count":0.13090323230288994,"stargazers_count":1.340977608580433,"forks_count":2.774659151569033,"docker_downloads_count":3.462265674733252,"average":1.3513210832575602},"purl":"pkg:pypi/pymupdf","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/pymupdf","docker_dependents_count":16,"docker_downloads_count":2059,"usage_url":"https://repos.ecosyste.ms/usage/pypi/pymupdf","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/pymupdf/dependencies","status":null,"funding_links":[],"critical":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pymupdf/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pymupdf/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pymupdf/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pymupdf/related_packages","maintainers":[{"uuid":"julian.smith_artifex.com","login":"julian.smith_artifex.com","name":null,"email":null,"url":null,"packages_count":5,"html_url":"https://pypi.org/user/julian.smith_artifex.com/","role":null,"created_at":"2022-12-13T12:29:08.448Z","updated_at":"2022-12-13T12:29:08.448Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/julian.smith_artifex.com/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":159,"unique_repositories_count_past_30_days":6,"recent_issues":[{"uuid":"4609344616","node_id":"PR_kwDOSeKPUc7juHdh","number":13,"state":"closed","title":"chore(deps): bump the backend-minor-patch group across 1 directory with 12 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-15T01:10:26.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-08T01:09:53.000Z","updated_at":"2026-06-15T01:10:28.000Z","time_to_close":604833,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"backend-minor-patch","update_count":12,"packages":[{"name":"ruff","old_version":"0.15.15","new_version":"0.15.16","repository_url":"https://github.com/astral-sh/ruff"},{"name":"fastapi","old_version":"0.115.0","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.30.6","new_version":"0.49.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"python-multipart","old_version":"0.0.9","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"httpx","old_version":"0.27.2","new_version":"0.28.1","repository_url":"https://github.com/encode/httpx"},{"name":"pdfplumber","old_version":"0.11.4","new_version":"0.11.9","repository_url":"https://github.com/jsvine/pdfplumber"},{"name":"pymupdf","old_version":"1.24.9","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"python-docx","old_version":"1.1.2","new_version":"1.2.0","repository_url":"https://github.com/python-openxml/python-docx"},{"name":"python-dotenv","old_version":"1.0.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"sqlalchemy","old_version":"2.0.36","new_version":"2.0.50","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"psycopg","old_version":"3.2.3","new_version":"3.3.4","repository_url":"https://github.com/psycopg/psycopg"},{"name":"alembic","old_version":"1.13.3","new_version":"1.18.4","repository_url":"https://github.com/sqlalchemy/alembic"}],"path":null,"ecosystem":"pip"},"body":"Bumps the backend-minor-patch group with 12 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.15` | `0.15.16` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.115.0` | `0.136.3` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.30.6` | `0.49.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.9` | `0.0.32` |\n| [httpx](https://github.com/encode/httpx) | `0.27.2` | `0.28.1` |\n| [pdfplumber](https://github.com/jsvine/pdfplumber) | `0.11.4` | `0.11.9` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.24.9` | `1.27.2.3` |\n| [python-docx](https://github.com/python-openxml/python-docx) | `1.1.2` | `1.2.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.0.1` | `1.2.2` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.36` | `2.0.50` |\n| [psycopg](https://github.com/psycopg/psycopg) | `3.2.3` | `3.3.4` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.13.3` | `1.18.4` |\n\n\nUpdates `ruff` from 0.15.15 to 0.15.16\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.15.16\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-04.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Implement \u003ccode\u003eyield-in-context-manager-in-async-generator\u003c/code\u003e (\u003ccode\u003eASYNC119\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24644\"\u003e#24644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Narrow diagnostic range and exclude cases without exception handlers (\u003ccode\u003ePLW0717\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25440\"\u003e#25440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Treat \u003ccode\u003eyield\u003c/code\u003e before \u003ccode\u003ebreak\u003c/code\u003e from a terminal loop as terminal (\u003ccode\u003eRUF075\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25447\"\u003e#25447\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eeradicate\u003c/code\u003e] Avoid flagging \u003ccode\u003eruff:ignore\u003c/code\u003e comments as code (\u003ccode\u003eERA001\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25537\"\u003e#25537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eeradicate\u003c/code\u003e] Fix \u003ccode\u003eERA001\u003c/code\u003e/\u003ccode\u003eRUF100\u003c/code\u003e conflict when \u003ccode\u003enoqa\u003c/code\u003e is on commented-out code (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25414\"\u003e#25414\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Avoid removing the \u003ccode\u003eformat\u003c/code\u003e call when it would change behavior (\u003ccode\u003eF523\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25320\"\u003e#25320\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (\u003ccode\u003ePLE2510\u003c/code\u003e, \u003ccode\u003ePLE2512\u003c/code\u003e, \u003ccode\u003ePLE2513\u003c/code\u003e, \u003ccode\u003ePLE2514\u003c/code\u003e, \u003ccode\u003ePLE2515\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25544\"\u003e#25544\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Avoid converting \u003ccode\u003eformat\u003c/code\u003e calls with more kinds of side effects (\u003ccode\u003eUP032\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25484\"\u003e#25484\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pytest-style\u003c/code\u003e] Avoid fixes for ambiguous \u003ccode\u003eargnames\u003c/code\u003e and \u003ccode\u003eargvalues\u003c/code\u003e combinations (\u003ccode\u003ePT006\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24776\"\u003e#24776\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop excess capacity from statement suites during parsing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25368\"\u003e#25368\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Improve discoverability of rules enabled for each convention (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24973\"\u003e#24973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Restore example code for Python versions before 3.15 (\u003ccode\u003eRUF017\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25439\"\u003e#25439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typo \u003ccode\u003ebin/active\u003c/code\u003e → \u003ccode\u003ebin/activate\u003c/code\u003e in tutorial (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25473\"\u003e#25473\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eShrink additional parser AST collections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25465\"\u003e#25465\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/Redslayer112\"\u003e\u003ccode\u003e@​Redslayer112\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koriyoshi2041\"\u003e\u003ccode\u003e@​koriyoshi2041\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/George-Ogden\"\u003e\u003ccode\u003e@​George-Ogden\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TejasAmle\"\u003e\u003ccode\u003e@​TejasAmle\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\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/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/loganrosen\"\u003e\u003ccode\u003e@​loganrosen\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/RafaelJohn9\"\u003e\u003ccode\u003e@​RafaelJohn9\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adityasingh2400\"\u003e\u003ccode\u003e@​adityasingh2400\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.15.16\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-04.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Implement \u003ccode\u003eyield-in-context-manager-in-async-generator\u003c/code\u003e (\u003ccode\u003eASYNC119\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24644\"\u003e#24644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Narrow diagnostic range and exclude cases without exception handlers (\u003ccode\u003ePLW0717\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25440\"\u003e#25440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Treat \u003ccode\u003eyield\u003c/code\u003e before \u003ccode\u003ebreak\u003c/code\u003e from a terminal loop as terminal (\u003ccode\u003eRUF075\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25447\"\u003e#25447\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eeradicate\u003c/code\u003e] Avoid flagging \u003ccode\u003eruff:ignore\u003c/code\u003e comments as code (\u003ccode\u003eERA001\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25537\"\u003e#25537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eeradicate\u003c/code\u003e] Fix \u003ccode\u003eERA001\u003c/code\u003e/\u003ccode\u003eRUF100\u003c/code\u003e conflict when \u003ccode\u003enoqa\u003c/code\u003e is on commented-out code (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25414\"\u003e#25414\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Avoid removing the \u003ccode\u003eformat\u003c/code\u003e call when it would change behavior (\u003ccode\u003eF523\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25320\"\u003e#25320\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (\u003ccode\u003ePLE2510\u003c/code\u003e, \u003ccode\u003ePLE2512\u003c/code\u003e, \u003ccode\u003ePLE2513\u003c/code\u003e, \u003ccode\u003ePLE2514\u003c/code\u003e, \u003ccode\u003ePLE2515\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25544\"\u003e#25544\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Avoid converting \u003ccode\u003eformat\u003c/code\u003e calls with more kinds of side effects (\u003ccode\u003eUP032\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25484\"\u003e#25484\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pytest-style\u003c/code\u003e] Avoid fixes for ambiguous \u003ccode\u003eargnames\u003c/code\u003e and \u003ccode\u003eargvalues\u003c/code\u003e combinations (\u003ccode\u003ePT006\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24776\"\u003e#24776\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop excess capacity from statement suites during parsing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25368\"\u003e#25368\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Improve discoverability of rules enabled for each convention (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24973\"\u003e#24973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Restore example code for Python versions before 3.15 (\u003ccode\u003eRUF017\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25439\"\u003e#25439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typo \u003ccode\u003ebin/active\u003c/code\u003e → \u003ccode\u003ebin/activate\u003c/code\u003e in tutorial (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25473\"\u003e#25473\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eShrink additional parser AST collections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25465\"\u003e#25465\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/Redslayer112\"\u003e\u003ccode\u003e@​Redslayer112\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koriyoshi2041\"\u003e\u003ccode\u003e@​koriyoshi2041\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/George-Ogden\"\u003e\u003ccode\u003e@​George-Ogden\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TejasAmle\"\u003e\u003ccode\u003e@​TejasAmle\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\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/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/loganrosen\"\u003e\u003ccode\u003e@​loganrosen\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/RafaelJohn9\"\u003e\u003ccode\u003e@​RafaelJohn9\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adityasingh2400\"\u003e\u003ccode\u003e@​adityasingh2400\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/astral-sh/ruff/commit/6c498ab5394edc5622d7f348e12956bf86203716\"\u003e\u003ccode\u003e6c498ab\u003c/code\u003e\u003c/a\u003e Bump 0.15.16 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25635\"\u003e#25635\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e51e132831c4e1c4a5ac00fca4c9256354ab99bf\"\u003e\u003ccode\u003ee51e132\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-async\u003c/code\u003e] Implement \u003ccode\u003eyield-in-context-manager-in-async-generator\u003c/code\u003e (`AS...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7c6dcd9f2611999c449143d241c582dedf287964\"\u003e\u003ccode\u003e7c6dcd9\u003c/code\u003e\u003c/a\u003e [ty] Add caching for pattern match narrowing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25613\"\u003e#25613\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/27058fc071b542bf06395ba89cabed061d313ca6\"\u003e\u003ccode\u003e27058fc\u003c/code\u003e\u003c/a\u003e [ty] Compact retained definition and expression identities (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25606\"\u003e#25606\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/bf80d05f007c939799f530c9e775ed9449f5b2eb\"\u003e\u003ccode\u003ebf80d05\u003c/code\u003e\u003c/a\u003e Fix CODEOWNERS syntax (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25622\"\u003e#25622\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/10ccd511e94a81d1e836b174f1c553a73ff3f1b3\"\u003e\u003ccode\u003e10ccd51\u003c/code\u003e\u003c/a\u003e Shrink additional parser AST collections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25465\"\u003e#25465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0d7135f4d23e7f4d8404daed16b9ef11d14f3fb9\"\u003e\u003ccode\u003e0d7135f\u003c/code\u003e\u003c/a\u003e [ty] Upgrade Salsa (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25545\"\u003e#25545\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/49493a3cea83a08fa9aa143695017c816a540f1d\"\u003e\u003ccode\u003e49493a3\u003c/code\u003e\u003c/a\u003e [ty] Show type alias value on hover (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25381\"\u003e#25381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/85207d3b7657a84252f266766cb0d56034dc21cc\"\u003e\u003ccode\u003e85207d3\u003c/code\u003e\u003c/a\u003e [ty] sys.implementation.version is not sys.version_info (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25608\"\u003e#25608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a8a0614348c1fcf47fc9b666eff61a103914d520\"\u003e\u003ccode\u003ea8a0614\u003c/code\u003e\u003c/a\u003e [ty] Avoid retaining duplicate function signatures (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25609\"\u003e#25609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.15...0.15.16\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi` from 0.115.0 to 0.136.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🍱 Update sponsors: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Fix image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✏️ Fix Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15530\"\u003e#15530\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15529\"\u003e#15529\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15528\"\u003e#15528\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15525\"\u003e#15525\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15524\"\u003e#15524\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15522\"\u003e#15522\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15523\"\u003e#15523\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15520\"\u003e#15520\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15521\"\u003e#15521\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\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/fastapi/fastapi/commit/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.115.0...0.136.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.30.6 to 0.49.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.49.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump httptools minimum version to 0.8.0 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/2962\"\u003eKludex/uvicorn#2962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) 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/2971\"\u003eKludex/uvicorn#2971\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.48.0...0.49.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults 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/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\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.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.47.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process 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/2919\"\u003eKludex/uvicorn#2919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration 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/2920\"\u003eKludex/uvicorn#2920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2927\"\u003eKludex/uvicorn#2927\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.46.0...0.47.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio 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/2917\"\u003eKludex/uvicorn#2917\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.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.45.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware 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/2903\"\u003eKludex/uvicorn#2903\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2905\"\u003eKludex/uvicorn#2905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively 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/2907\"\u003eKludex/uvicorn#2907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config 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/2906\"\u003eKludex/uvicorn#2906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert empty context for ASGI runs 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/2911\"\u003eKludex/uvicorn#2911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context 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/2912\"\u003eKludex/uvicorn#2912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2913\"\u003eKludex/uvicorn#2913\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/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2870\"\u003eKludex/uvicorn#2870\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.44.0...0.45.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.44.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplement websocket keepalive pings for websockets-sansio 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/2888\"\u003eKludex/uvicorn#2888\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/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.49.0 (June 3, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003ehttptools\u003c/code\u003e minimum version to 0.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2962\"\u003e#2962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (reverses the 0.48.0 behavior of ignoring them) (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.47.0 (May 14, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2920\"\u003e#2920\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2927\"\u003e#2927\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.45.0 (April 21, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2905\"\u003e#2905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\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/3ef2e3e08e3d9ad9572800f8bc54f3eaed9eab0a\"\u003e\u003ccode\u003e3ef2e3e\u003c/code\u003e\u003c/a\u003e Version 0.49.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2973\"\u003e#2973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/eeb64b1d1c95a14096ed3313377c74b485f558fc\"\u003e\u003ccode\u003eeeb64b1\u003c/code\u003e\u003c/a\u003e Consume duplicate forwarding headers in ProxyHeadersMiddleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/630f4aca14e79183617c71be714030842a1041c5\"\u003e\u003ccode\u003e630f4ac\u003c/code\u003e\u003c/a\u003e Make the watchfiles reload tests deterministic (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2972\"\u003e#2972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9154922e3730f7aba68ecc3ecbf536680ee8fd1c\"\u003e\u003ccode\u003e9154922\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group across 1 directory with 6 updates ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/739727a1d80e468d1e47e98bbd824ee9e3c9554b\"\u003e\u003ccode\u003e739727a\u003c/code\u003e\u003c/a\u003e Migrate docs deploy from Cloudflare Pages to Workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2967\"\u003e#2967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/be4a240488d3fb678a11b8e8f83505266f5f1de7\"\u003e\u003ccode\u003ebe4a240\u003c/code\u003e\u003c/a\u003e Gate docs preview deploy on Cloudflare token presence (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/c489d7e10dfe653a2bba914feedf2a632a026e6f\"\u003e\u003ccode\u003ec489d7e\u003c/code\u003e\u003c/a\u003e Bump httptools minimum version to 0.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2962\"\u003e#2962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9f547bd82ef52bcba206e04170b359bd6daa25b3\"\u003e\u003ccode\u003e9f547bd\u003c/code\u003e\u003c/a\u003e Skip docs preview deploy for Dependabot PRs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2961\"\u003e#2961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/44446b894e37ca76830d6aa83df4349795400ed4\"\u003e\u003ccode\u003e44446b8\u003c/code\u003e\u003c/a\u003e Migrate documentation from MkDocs Material to Zensical (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2959\"\u003e#2959\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/cfd659c4f18b526adce9c255c96707bab20af40c\"\u003e\u003ccode\u003ecfd659c\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions to 10.21.3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2958\"\u003e#2958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.30.6...0.49.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.9 to 0.0.32\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.32\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace per-byte partial-boundary scan with rfind lookbehind 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/python-multipart/pull/300\"\u003eKludex/python-multipart#300\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/python-multipart/compare/0.0.31...0.0.32\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.31\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch 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/python-multipart/pull/295\"\u003eKludex/python-multipart#295\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating 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/python-multipart/pull/296\"\u003eKludex/python-multipart#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate Content-Length is non-negative in parse_form 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/python-multipart/pull/297\"\u003eKludex/python-multipart#297\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/python-multipart/compare/0.0.30...0.0.31\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.30\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTreat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator 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/python-multipart/pull/290\"\u003eKludex/python-multipart#290\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003eKludex/python-multipart#291\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/python-multipart/compare/0.0.29...0.0.30\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.29\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle malformed RFC 2231 continuations in \u003ccode\u003eparse_options_header\u003c/code\u003e by \u003ca href=\"https://github.com/manunio\"\u003e\u003ccode\u003e@​manunio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/270\"\u003eKludex/python-multipart#270\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/python-multipart/compare/0.0.28...0.0.29\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.28...0.0.29\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.28\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary tail scan via \u003ccode\u003ebytes.find\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/281\"\u003eKludex/python-multipart#281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCap multipart boundary length at 256 bytes 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/python-multipart/pull/282\"\u003eKludex/python-multipart#282\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/python-multipart/compare/0.0.27...0.0.28\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.27...0.0.28\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.27\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePass parse offsets via constructors 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/python-multipart/pull/268\"\u003eKludex/python-multipart#268\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd multipart header limits 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/python-multipart/pull/267\"\u003eKludex/python-multipart#267\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/python-multipart/compare/0.0.26...0.0.27\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.26\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSkip preamble before first multipart boundary 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/python-multipart/pull/262\"\u003eKludex/python-multipart#262\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilently discard epilogue data after the closing boundary 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/python-multipart/pull/259\"\u003eKludex/python-multipart#259\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/Kludex/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.32 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary scanning for CR/LF-dense part data \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003e#300\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.31 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003e#295\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003e#296\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eValidate \u003ccode\u003eContent-Length\u003c/code\u003e is non-negative in \u003ccode\u003eparse_form\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003e#297\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.30 (2026-05-31)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eParse \u003ccode\u003eapplication/x-www-form-urlencoded\u003c/code\u003e bodies per the WHATWG URL standard, treating only \u003ccode\u003e\u0026amp;\u003c/code\u003e as a field separator \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/290\"\u003e#290\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231/5987 extended parameters (\u003ccode\u003ename*\u003c/code\u003e, \u003ccode\u003efilename*\u003c/code\u003e) in \u003ccode\u003eparse_options_header\u003c/code\u003e, keeping the plain parameter authoritative per \u003ca href=\"https://datatracker.ietf.org/doc/html/rfc7578#section-4.2\"\u003eRFC 7578 §4.2\u003c/a\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003e#291\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.29 (2026-05-17)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle malformed RFC 2231 continuations in \u003ccode\u003eparse_options_header\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/270\"\u003e#270\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.28 (2026-05-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary tail scan via \u003ccode\u003ebytes.find\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/281\"\u003e#281\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCap multipart boundary length at 256 bytes \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/282\"\u003e#282\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.27 (2026-04-27)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd multipart header limits \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/267\"\u003e#267\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePass parse offsets via constructors \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/268\"\u003e#268\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.26 (2026-04-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSkip preamble before the first multipart boundary more efficiently \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/262\"\u003e#262\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSilently discard epilogue data after the closing multipart boundary \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/259\"\u003e#259\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.25 (2026-04-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd MIME content type info to \u003ccode\u003eFile\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/143\"\u003e#143\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eHandle CTE values case-insensitively \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/258\"\u003e#258\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eRemove custom \u003ccode\u003eFormParser\u003c/code\u003e classes \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/257\"\u003e#257\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eUPLOAD_DELETE_TMP\u003c/code\u003e to \u003ccode\u003eFormParser\u003c/code\u003e config \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/254\"\u003e#254\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eEmit \u003ccode\u003efield_end\u003c/code\u003e for trailing bare field names on finalize \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/230\"\u003e#230\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eHandle multipart headers case-insensitively \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/252\"\u003e#252\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eApply Apache-2.0 properly \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/247\"\u003e#247\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.24 (2026-04-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eValidate \u003ccode\u003echunk_size\u003c/code\u003e in \u003ccode\u003eparse_form()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/244\"\u003e#244\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.23 (2026-04-05)\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/Kludex/python-multipart/commit/238ead62a0bb6f6cdfe122708faa13812f59f9a6\"\u003e\u003ccode\u003e238ead6\u003c/code\u003e\u003c/a\u003e Version 0.0.32 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/302\"\u003e#302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/86729796093b04f7cf414ea6c2c4499e2a5750af\"\u003e\u003ccode\u003e8672979\u003c/code\u003e\u003c/a\u003e Replace per-byte partial-boundary scan with rfind lookbehind (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/300\"\u003e#300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/8190779d8234c8bf8cbed7891c11d4bfb79e84df\"\u003e\u003ccode\u003e8190779\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 7 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/301\"\u003e#301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/0d3c086d237f6fd20fefe8853e95979276a07c44\"\u003e\u003ccode\u003e0d3c086\u003c/code\u003e\u003c/a\u003e Use uv package ecosystem for Dependabot (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/4cffc68a165f7a6f6b7756ce006fabf07a05b7a4\"\u003e\u003ccode\u003e4cffc68\u003c/code\u003e\u003c/a\u003e Version 0.0.31 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/c814948acf509cef7881fa75c969969b19239bbf\"\u003e\u003ccode\u003ec814948\u003c/code\u003e\u003c/a\u003e Reject negative \u003ccode\u003eContent-Length\u003c/code\u003e in \u003ccode\u003eparse_form\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/297\"\u003e#297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6b837d47bc68826ed5cbbcb50c6c6a6093444494\"\u003e\u003ccode\u003e6b837d4\u003c/code\u003e\u003c/a\u003e Bound header field name size before validating (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/e0c4f9df2e737d1663fbbdd6563f80613a2089f9\"\u003e\u003ccode\u003ee0c4f9d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/294\"\u003e#294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b8a01bb683e8e8675fdb5d831b206a478c8215aa\"\u003e\u003ccode\u003eb8a01bb\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6732164f30c58e28589a1e22213d2f6b8c6bad9f\"\u003e\u003ccode\u003e6732164\u003c/code\u003e\u003c/a\u003e Speed up multipart header parsing and callback dispatch (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.9...0.0.32\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpx` from 0.27.2 to 0.28.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/releases\"\u003ehttpx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.28.1\u003c/h2\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 0.28.0\u003c/h2\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/HEAD/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\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/encode/httpx/blob/master/CHANGELOG.md\"\u003ehttpx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eBe aware that the default \u003cem\u003eJSON request bodies now use a more compact representation\u003c/em\u003e. This is generally considered a prefered style, tho may require updates to test suites.\u003c/p\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations...\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/master/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\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/encode/httpx/commit/26d48e0634e6ee9cdc0533996db289ce4b430177\"\u003e\u003ccode\u003e26d48e0\u003c/code\u003e\u003c/a\u003e Version 0.28.1 (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3445\"\u003e#3445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/89599a9541af14bcf906fc4ed58ccbdf403802ba\"\u003e\u003ccode\u003e89599a9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003everify=False\u003c/code\u003e, \u003ccode\u003ecert=...\u003c/code\u003e case. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3442\"\u003e#3442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/8ecb86f0d74ffc52d4663214fae9526bee89358d\"\u003e\u003ccode\u003e8ecb86f\u003c/code\u003e\u003c/a\u003e Add test for request params behavior changes (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3440\"\u003e#3440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/0cb7e5a2e736628e2f506d259fcf0d48cd2bde82\"\u003e\u003ccode\u003e0cb7e5a\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 11 updates (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3434\"\u003e#3434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/15e21e9ea3cad4f06e22a7e704aabefdf43d2e29\"\u003e\u003ccode\u003e15e21e9\u003c/code\u003e\u003c/a\u003e Updating deprecated docstring Client() class (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3426\"\u003e#3426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/80960fa31918d7663c3f4c3ad61661cf0e80628f\"\u003e\u003ccode\u003e80960fa\u003c/code\u003e\u003c/a\u003e Version 0.28.0. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3419\"\u003e#3419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/a33c87852b8a0dddc65e5f739af1e0a6fca4b91f\"\u003e\u003ccode\u003ea33c878\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eextensions\u003c/code\u003e type annotation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3380\"\u003e#3380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/ce7e14da27abba6574be9b3ea7cd5990556a9343\"\u003e\u003ccode\u003ece7e14d\u003c/code\u003e\u003c/a\u003e Error on verify as str. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3418\"\u003e#3418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/47f4a96ffaaaa07dca1614409549b5d7a6e7af49\"\u003e\u003ccode\u003e47f4a96\u003c/code\u003e\u003c/a\u003e Handle empty zstd responses (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3412\"\u003e#3412\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/189fc4bcbe5f314128775dec66a616ac9a31ad48\"\u003e\u003ccode\u003e189fc4b\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md, fix typo(s) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3406\"\u003e#3406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/httpx/compare/0.27.2...0.28.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pdfplumber` from 0.11.4 to 0.11.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jsvine/pdfplumber/releases\"\u003epdfplumber's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.11.9\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251107\u003c/code\u003e to \u003ccode\u003e20251230\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/75bbed3\"\u003e75bbed3\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1524ce4\"\u003e1524ce4\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/26687c3\"\u003e26687c3\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/9555532\"\u003e9555532\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.11.8\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eedge_min_length_prefilter\u003c/code\u003e table setting for initial edge filtering. Lowering this setting enables capturing small edge segments (e.g., dashed lines) that would be filtered out with the default minimum length of 1. Raising this setting would be less common but plausible. (h/t \u003ca href=\"https://github.com/bronislav\"\u003e\u003ccode\u003e@​bronislav\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1274\"\u003e#1274\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20250506\u003c/code\u003e to \u003ccode\u003e20251107\u003c/code\u003e (h/t \u003ca href=\"https://github.com/henry-renner-v\"\u003e\u003ccode\u003e@​henry-renner-v\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/pull/1348/commits/0079187ab5493f4440147cde83ee627cab081079\"\u003e0079187\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.11.7\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd access to \u003ccode\u003ePage.trimbox\u003c/code\u003e, \u003ccode\u003ePage.bleedbox\u003c/code\u003e, and \u003ccode\u003ePage.artbox\u003c/code\u003e (h/t \u003ca href=\"https://github.com/samuelbradshaw\"\u003e\u003ccode\u003e@​samuelbradshaw\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1313\"\u003e#1313\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/7e364e6193c6e8bafa9b46587c0fdd4a46405399\"\u003e7e364e6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20250327\u003c/code\u003e to \u003ccode\u003e20250506\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/4c7e092\"\u003e4c7e092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003estroking_pattern\u003c/code\u003e and \u003ccode\u003enon_stroking_pattern\u003c/code\u003e object attributes, due to changes in \u003ccode\u003epdfminer.six\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/4c7e092\"\u003e4c7e092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.11.6\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20231228\u003c/code\u003e to \u003ccode\u003e20250327\u003c/code\u003e (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/3fcb493\"\u003e3fcb493\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/12a73a2\"\u003e12a73a2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse csv.QUOTE_MINIMAL for .to_csv(...) (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/980494a\"\u003e980494a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix bug with \u003ccode\u003euse_text_flow=True\u003c/code\u003e text extraction (h/t \u003ca href=\"https://github.com/samuelbradshaw\"\u003e\u003ccode\u003e@​samuelbradshaw\u003c/code\u003e\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1279\"\u003e#1279\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/e15ed98\"\u003ee15ed98\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCatch exceptions from pdfminer and malformed PDFs (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/43ccc5b\"\u003e43ccc5b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMore broadly handle RecursionError (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/748ff31\"\u003e748ff31\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove test_issue_1089 (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1263\"\u003e#1263\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/7e28e76\"\u003e7e28e76\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.11.5\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--format text\u003c/code\u003e options to CLI (in addition to previously-available \u003ccode\u003ecsv\u003c/code\u003e and \u003ccode\u003ejson\u003c/code\u003e) (h/t \u003ca href=\"https://github.com/brandonrobertz\"\u003e\u003ccode\u003e@​brandonrobertz\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/pull/1235\"\u003e#1235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eraise_unicode_errors: bool\u003c/code\u003e parameter to \u003ccode\u003epdfplumber.open()\u003c/code\u003e to allow bypassing \u003ccode\u003eUnicodeDecodeError\u003c/code\u003es in annotation-parsing and generate warnings instead (h/t \u003ca href=\"https://github.com/stolarczyk\"\u003e\u003ccode\u003e@​stolarczyk\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1195\"\u003e#1195\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ename\u003c/code\u003e property to \u003ccode\u003eimage\u003c/code\u003e objects (h/t \u003ca href=\"https://github.com/djr2015\"\u003e\u003ccode\u003e@​djr2015\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/discussions/1201\"\u003e#1201\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003ePageImage.debug_tablefinder(...)\u003c/code\u003e so that its main keyword argument is named the same (\u003ccode\u003etable_settings=\u003c/code\u003e) as other related \u003ccode\u003ePage\u003c/code\u003e methods (h/t \u003ca href=\"https://github.com/stolarczyk\"\u003e\u003ccode\u003e@​stolarczyk\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1237\"\u003e#1237\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/jsvine/pdfplumber/blob/stable/CHANGELOG.md\"\u003epdfplumber's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.9 — 2026-01-05\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251107\u003c/code\u003e to \u003ccode\u003e20251230\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/75bbed3\"\u003e75bbed3\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1524ce4\"\u003e1524ce4\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/26687c3\"\u003e26687c3\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/9555532\"\u003e9555532\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[0.11.8] - 2025-11-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eedge_min_length_prefilter\u003c/code\u003e table setting for initial edge filtering. Lowering this setting enables capturing small edge segments (e.g., dashed lines) that would be filtered out with the default minimum length of 1. Raising this setting would be less common but plausible. (h/t \u003ca href=\"https://github.com/bronislav\"\u003e\u003ccode\u003e@​bronislav\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1274\"\u003e#1274\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20250506\u003c/code\u003e to \u003ccode\u003e20251107\u003c/code\u003e (h/t \u003ca href=\"https://github.com/henry-renner-v\"\u003e\u003ccode\u003e@​henry-renner-v\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/pull/1348/commits/0079187ab5493f4440147cde83ee627cab081079\"\u003e0079187\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[0.11.7] - 2025-06-12\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd access to \u003ccode\u003ePage.trimbox\u003c/code\u003e, \u003ccode\u003ePage.bleedbox\u003c/code\u003e, and \u003ccode\u003ePage.artbox\u003c/code\u003e (h/t \u003ca href=\"https://github.com/samuelbradshaw\"\u003e\u003ccode\u003e@​samuelbradshaw\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1313\"\u003e#1313\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/7e364e6193c6e8bafa9b46587c0fdd4a46405399\"\u003e7e364e6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20250327\u003c/code\u003e to \u003ccode\u003e20250506\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/4c7e092\"\u003e4c7e092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003estroking_pattern\u003c/code\u003e and \u003ccode\u003enon_stroking_pattern\u003c/code\u003e object attributes, due to changes in \u003ccode\u003epdfminer.six\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/4c7e092\"\u003e4c7e092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[0.11.6] - 2025-03-27\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20231228\u003c/code\u003e to \u003ccode\u003e20250327\u003c/code\u003e (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/3fcb493\"\u003e3fcb493\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/12a73a2\"\u003e12a73a2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse csv.QUOTE_MINIMAL for .to_csv(...) (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/980494a\"\u003e980494a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix bug with \u003ccode\u003euse_text_flow=True\u003c/code\u003e text extraction (h/t \u003ca href=\"https://github.com/samuelbradshaw\"\u003e\u003ccode\u003e@​samuelbradshaw\u003c/code\u003e\u003c/a\u003e)(\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1279\"\u003e#1279\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/e15ed98\"\u003ee15ed98\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCatch exceptions from pdfminer and malformed PDFs (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/43ccc5b\"\u003e43ccc5b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMore broadly handle RecursionError (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/748ff31\"\u003e748ff31\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove test_issue_1089 (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1263\"\u003e#1263\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/7e28e76\"\u003e7e28e76\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[0.11.5] - 2025-01-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--format text\u003c/code\u003e options to CLI (in addition to previously-available \u003ccode\u003ecsv\u003c/code\u003e and \u003ccode\u003ejson\u003c/code\u003e) (h/t \u003ca href=\"https://github.com/brandonrobertz\"\u003e\u003ccode\u003e@​brandonrobertz\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/pull/1235\"\u003e#1235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eraise_unicode_errors: bool\u003c/code\u003e parameter to \u003ccode\u003epdfplumber.open()\u003c/code\u003e to allow bypassing \u003ccode\u003eUnicodeDecodeError\u003c/code\u003es in annotation-parsing and generate warnings instead (h/t \u003ca href=\"https://github.com/stolarczyk\"\u003e\u003ccode\u003e@​stolarczyk\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1195\"\u003e#1195\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ename\u003c/code\u003e property to \u003ccode\u003eimage\u003c/code\u003e objects (h/t \u003ca href=\"https://github.com/djr2015\"\u003e\u003ccode\u003e@​djr2015\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/discussions/1201\"\u003e#1201\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003ePageImage.debug_tablefinder(...)\u003c/code\u003e so that its main keyword argument is named the same (\u003ccode\u003etable_settings=\u003c/code\u003e) as other related \u003ccode\u003ePage\u003c/code\u003e methods (h/t \u003ca href=\"https://github.com/n-traore\"\u003e\u003ccode\u003e@​n-traore\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1237\"\u003e#1237\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/jsvine/pdfplumber/commit/db828e3ac08ded001650e6ec66b23e719370d22e\"\u003e\u003ccode\u003edb828e3\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/0aca9f507251ab4c31887b6874896eca269ddb5b\"\u003e\u003ccode\u003e0aca9f5\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/955553292ccfc295020f0d0b661ed3332f57b2bd\"\u003e\u003ccode\u003e9555532\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251229 to 20251230\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/26687c3f87150e85b0fad0e5991bccf0d5a01da5\"\u003e\u003ccode\u003e26687c3\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251228 to 20251229\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/45a3530090d67718eac2a416a4eb8846db70f593\"\u003e\u003ccode\u003e45a3530\u003c/code\u003e\u003c/a\u003e Replace pytest-parallel with pytest-xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/a28150134c80a94202b9b26f2bcc34357f0a4b5b\"\u003e\u003ccode\u003ea281501\u003c/code\u003e\u003c/a\u003e Loosen some requirements-dev.txt versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/6dd1bde2e0596aebf42d7a397410489c2ecc06db\"\u003e\u003ccode\u003e6dd1bde\u003c/code\u003e\u003c/a\u003e Test also on Python 3.13, 3.14, not on 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/3e47d1689df3931c965eb40ed1e1c6c0af76f32e\"\u003e\u003ccode\u003e3e47d16\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1524ce40e7f20e7b3ef311afe49231c603bbdc42\"\u003e\u003ccode\u003e1524ce4\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251227 to 20251228\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/75bbed3950df471c82e0d4540b14c5cd22f005be\"\u003e\u003ccode\u003e75bbed3\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251107 to 20251227\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jsvine/pdfplumber/compare/v0.11.4...v0.11.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.24.9 to 1.27.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package ...\n\n_Description has been truncated_","html_url":"https://github.com/qubo851006-ctrl/reactV3/pull/13","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/qubo851006-ctrl%2FreactV3/issues/13","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/13/packages"},{"uuid":"4559867292","node_id":"PR_kwDOSftIMc7hMoyz","number":16,"state":"open","title":"chore(deps)(deps): Bump the python-patch-minor group across 1 directory with 21 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-01T02:21:21.000Z","updated_at":"2026-06-01T02:21:22.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps): Bump","group_name":"python-patch-minor","update_count":21,"packages":[{"name":"ruff","old_version":"0.15.14","new_version":"0.15.15","repository_url":"https://github.com/astral-sh/ruff"},{"name":"coverage","old_version":"7.14.0","new_version":"7.14.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"python-multipart","old_version":"0.0.29","new_version":"0.0.30","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"sqlalchemy","old_version":"2.0.49","new_version":"2.0.50","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"pymupdf","old_version":"1.20.2","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"pypdf","old_version":"6.10.2","new_version":"6.12.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"openai","old_version":"2.32.0","new_version":"2.38.0","repository_url":"https://github.com/openai/openai-python"},{"name":"google-api-python-client","old_version":"2.196.0","new_version":"2.197.0","repository_url":"https://github.com/googleapis/google-api-python-client"},{"name":"grpcio-status","old_version":"1.71.2","new_version":"1.80.0"},{"name":"idna","old_version":"3.16","new_version":"3.17","repository_url":"https://github.com/kjd/idna"},{"name":"mpmath","old_version":"1.3.0","new_version":"1.4.1","repository_url":"https://github.com/mpmath/mpmath"},{"name":"networkx","old_version":"3.4.2","new_version":"3.6.1","repository_url":"https://github.com/networkx/networkx"},{"name":"numpy","old_version":"2.2.6","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"scikit-image","old_version":"0.25.2","new_version":"0.26.0","repository_url":"https://github.com/scikit-image/scikit-image"},{"name":"scipy","old_version":"1.15.3","new_version":"1.17.1","repository_url":"https://github.com/scipy/scipy"},{"name":"starlette","old_version":"1.0.1","new_version":"1.2.1","repository_url":"https://github.com/Kludex/starlette"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-patch-minor group with 21 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.14` | `0.15.15` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.0` | `7.14.1` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.136.3` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.48.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.29` | `0.0.30` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.49` | `2.0.50` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.20.2` | `1.27.2.3` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.10.2` | `6.12.2` |\n| [openai](https://github.com/openai/openai-python) | `2.32.0` | `2.38.0` |\n| [google-api-python-client](https://github.com/googleapis/google-api-python-client) | `2.196.0` | `2.197.0` |\n| [grpcio-status](https://grpc.io) | `1.71.2` | `1.80.0` |\n| [idna](https://github.com/kjd/idna) | `3.16` | `3.17` |\n| [mpmath](https://github.com/mpmath/mpmath) | `1.3.0` | `1.4.1` |\n| [networkx](https://github.com/networkx/networkx) | `3.4.2` | `3.6.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.2.6` | `2.4.6` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.47.0` |\n| [scikit-image](https://github.com/scikit-image/scikit-image) | `0.25.2` | `0.26.0` |\n| [scipy](https://github.com/scipy/scipy) | `1.15.3` | `1.17.1` |\n| [starlette](https://github.com/Kludex/starlette) | `1.0.1` | `1.2.1` |\n\n\nUpdates `ruff` from 0.15.14 to 0.15.15\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.15.15\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-28.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix Markdown closing fence handling (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25310\"\u003e#25310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Report duplicate imports in \u003ccode\u003etyping.TYPE_CHECKING\u003c/code\u003e block (\u003ccode\u003eF811\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22560\"\u003e#22560\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Treat function-scope bare annotations as locals per PEP 526 (\u003ccode\u003eF821\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/21540\"\u003e#21540\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant \u003ccode\u003eTokenValue\u003c/code\u003e drops in the lexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25300\"\u003e#25300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce memory usage by dropping token-excess capacity and improve performance by approximating the initial tokens \u003ccode\u003eVec\u003c/code\u003e size (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25354\"\u003e#25354\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eThinVec\u003c/code\u003e in AST to shrink \u003ccode\u003eStmt\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25361\"\u003e#25361\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eline-length\u003c/code\u003e example for \u003ccode\u003e--config\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25389\"\u003e#25389\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Document \u003ccode\u003eRecursionError\u003c/code\u003e edge case in \u003ccode\u003e__len__\u003c/code\u003e (\u003ccode\u003eC416\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25286\"\u003e#25286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003emccabe\u003c/code\u003e] Improve example (\u003ccode\u003eC901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25287\"\u003e#25287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Clarify fix safety docs (\u003ccode\u003eUP007\u003c/code\u003e, \u003ccode\u003eUP045\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25288\"\u003e#25288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Document \u003ccode\u003eFURB192\u003c/code\u003e exception change for empty sequences (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25317\"\u003e#25317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Document false negative for user-defined types (\u003ccode\u003eRUF013\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25289\"\u003e#25289\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix formatting of lambdas nested within f-strings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25398\"\u003e#25398\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReturn code action for \u003ccode\u003ecodeAction/resolve\u003c/code\u003e requests that contain no or no valid URL (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25365\"\u003e#25365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExpand semantic syntax errors for invalid walruses (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25415\"\u003e#25415\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/chirizxc\"\u003e\u003ccode\u003e@​chirizxc\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/adityasingh2400\"\u003e\u003ccode\u003e@​adityasingh2400\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/fallintoplace\"\u003e\u003ccode\u003e@​fallintoplace\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martin-schlossarek\"\u003e\u003ccode\u003e@​martin-schlossarek\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\u003c/ul\u003e\n\u003c!-- 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.15.15\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-28.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix Markdown closing fence handling (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25310\"\u003e#25310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Report duplicate imports in \u003ccode\u003etyping.TYPE_CHECKING\u003c/code\u003e block (\u003ccode\u003eF811\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22560\"\u003e#22560\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Treat function-scope bare annotations as locals per PEP 526 (\u003ccode\u003eF821\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/21540\"\u003e#21540\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant \u003ccode\u003eTokenValue\u003c/code\u003e drops in the lexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25300\"\u003e#25300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce memory usage by dropping token-excess capacity and improve performance by approximating the initial tokens \u003ccode\u003eVec\u003c/code\u003e size (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25354\"\u003e#25354\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eThinVec\u003c/code\u003e in AST to shrink \u003ccode\u003eStmt\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25361\"\u003e#25361\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eline-length\u003c/code\u003e example for \u003ccode\u003e--config\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25389\"\u003e#25389\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Document \u003ccode\u003eRecursionError\u003c/code\u003e edge case in \u003ccode\u003e__len__\u003c/code\u003e (\u003ccode\u003eC416\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25286\"\u003e#25286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003emccabe\u003c/code\u003e] Improve example (\u003ccode\u003eC901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25287\"\u003e#25287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Clarify fix safety docs (\u003ccode\u003eUP007\u003c/code\u003e, \u003ccode\u003eUP045\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25288\"\u003e#25288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Document \u003ccode\u003eFURB192\u003c/code\u003e exception change for empty sequences (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25317\"\u003e#25317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Document false negative for user-defined types (\u003ccode\u003eRUF013\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25289\"\u003e#25289\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix formatting of lambdas nested within f-strings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25398\"\u003e#25398\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReturn code action for \u003ccode\u003ecodeAction/resolve\u003c/code\u003e requests that contain no or no valid URL (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25365\"\u003e#25365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExpand semantic syntax errors for invalid walruses (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25415\"\u003e#25415\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/chirizxc\"\u003e\u003ccode\u003e@​chirizxc\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/adityasingh2400\"\u003e\u003ccode\u003e@​adityasingh2400\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/fallintoplace\"\u003e\u003ccode\u003e@​fallintoplace\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martin-schlossarek\"\u003e\u003ccode\u003e@​martin-schlossarek\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/Ruchir28\"\u003e\u003ccode\u003e@​Ruchir28\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/astral-sh/ruff/commit/db5aa0a5f1b92cb91d910bf0866a967554dd94f5\"\u003e\u003ccode\u003edb5aa0a\u003c/code\u003e\u003c/a\u003e Bump 0.15.15 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25431\"\u003e#25431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/366fe21ba369ccdd01eb99c1043c9a969c99230b\"\u003e\u003ccode\u003e366fe21\u003c/code\u003e\u003c/a\u003e [ty] Improve diagnostics for syntax errors in forward annotations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25158\"\u003e#25158\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e2e1e647d182b8567845039c9a65fb0608a4dcfc\"\u003e\u003ccode\u003ee2e1e64\u003c/code\u003e\u003c/a\u003e [ty] Remove excess capacity from more Salsa cached collections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25411\"\u003e#25411\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1bd77e1646f2213d86b8da215f08279187867d72\"\u003e\u003ccode\u003e1bd77e1\u003c/code\u003e\u003c/a\u003e [ty] Use diagnostic message as tie breaker when sorting (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25424\"\u003e#25424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7e1bc1e75f15795f12c846294b13df4535f2abbf\"\u003e\u003ccode\u003e7e1bc1e\u003c/code\u003e\u003c/a\u003e Add agent skills for working on ty (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25422\"\u003e#25422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/574e10752f8cfa9e0cdbe3b01e96c4380950469b\"\u003e\u003ccode\u003e574e107\u003c/code\u003e\u003c/a\u003e Expand semantic syntax errors for invalid walruses (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25415\"\u003e#25415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4a7ca062fccd80443a43aa61e5dc7e5858e88dc1\"\u003e\u003ccode\u003e4a7ca06\u003c/code\u003e\u003c/a\u003e [ty] Display docs for matching parameter when hovering over the name of an ar...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54327092dbfe455040690d63bb1e5e4b5f551239\"\u003e\u003ccode\u003e5432709\u003c/code\u003e\u003c/a\u003e Refine a few agents instructions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25423\"\u003e#25423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3cb09eba689ebb49e799131092121928cc789c18\"\u003e\u003ccode\u003e3cb09eb\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003etyping.TypeForm\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25334\"\u003e#25334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c8cd59f189f2b6f55d542b29bddb953622add6fc\"\u003e\u003ccode\u003ec8cd59f\u003c/code\u003e\u003c/a\u003e [ty] Infer class attributes assigned by metaclass initialization (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25342\"\u003e#25342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.14...0.15.15\"\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.0 to 7.14.1\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.14.1 — 2026-05-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the HTML report used typographic niceties to make file paths more\nreadable by adding a small amount of space around slashes. Those spaces\ninterfered with searching the page for file paths of interest. Now the report\nuses CSS to accomplish the same visual tweak so that searches with slashes\nwork correctly. Closes \u003ccode\u003eissue 2170\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAdd a 3.16 PyPI classifier \u0026lt;hugo-316_\u0026gt;\u003c/code\u003e_ since we test on the 3.16 main\nbranch.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2170: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2170\"\u003ecoveragepy/coveragepy#2170\u003c/a\u003e\n.. _hugo-316: \u003ca href=\"https://mastodon.social/@hugovk/116588523571204490\"\u003ehttps://mastodon.social/@​hugovk/116588523571204490\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-14-0:\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/64d9b66fd852c1920ffe6cb8b58d7e4fdae90226\"\u003e\u003ccode\u003e64d9b66\u003c/code\u003e\u003c/a\u003e docs: correct the date for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/6fa7dd44c25e1a660252faaf030dd8f2f1e20861\"\u003e\u003ccode\u003e6fa7dd4\u003c/code\u003e\u003c/a\u003e chore: bump actions/dependency-review-action (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2181\"\u003e#2181\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/078afae263597b004eb9a85d880b6a65008e75ed\"\u003e\u003ccode\u003e078afae\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/cb4f028a36e008b664739d04f387b90ee5105044\"\u003e\u003ccode\u003ecb4f028\u003c/code\u003e\u003c/a\u003e docs: prep for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ae2d09f562271c6169534e1c242d015dd0823dda\"\u003e\u003ccode\u003eae2d09f\u003c/code\u003e\u003c/a\u003e Merge branch 'nedbat/classifire-316-kits'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/2c3568b2e041f2c0dbbc8eaa3919d46ee891b743\"\u003e\u003ccode\u003e2c3568b\u003c/code\u003e\u003c/a\u003e build: declare 3.16 compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/faa68f8601cf098701b68976dbb73b9fc23c9297\"\u003e\u003ccode\u003efaa68f8\u003c/code\u003e\u003c/a\u003e chore: bump github/codeql-action in the action-dependencies group (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2173\"\u003e#2173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/eb55feedf54b363e3d0b678f20abf3bfd3551a88\"\u003e\u003ccode\u003eeb55fee\u003c/code\u003e\u003c/a\u003e test: we don't need PyPy \u0026lt; 7.3.22 anymore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ac168fe53c04cdb2ff5231c0c4e5045021ee339b\"\u003e\u003ccode\u003eac168fe\u003c/code\u003e\u003c/a\u003e test: the text summary should show missing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/fed4bd2db3c1cb2916a07791041da693fbf8e996\"\u003e\u003ccode\u003efed4bd2\u003c/code\u003e\u003c/a\u003e chore: upgrade virtualenv\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.0...7.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi` from 0.136.1 to 0.136.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🍱 Update sponsors: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Fix image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✏️ Fix Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15530\"\u003e#15530\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15529\"\u003e#15529\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15528\"\u003e#15528\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15525\"\u003e#15525\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15524\"\u003e#15524\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15522\"\u003e#15522\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15523\"\u003e#15523\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15520\"\u003e#15520\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15521\"\u003e#15521\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\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/fastapi/fastapi/commit/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.47.0 to 0.48.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults 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/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\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.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.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/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\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/73e84e58d7f6b8b3dfd8a9e3e42d716862250f33\"\u003e\u003ccode\u003e73e84e5\u003c/code\u003e\u003c/a\u003e Version 0.48.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45ea11690b4a62fa6df339d2b6ee3b8545a418e0\"\u003e\u003ccode\u003e45ea116\u003c/code\u003e\u003c/a\u003e Ignore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/dd4394c3cbfd9f27a696a7b08047149690058158\"\u003e\u003ccode\u003edd4394c\u003c/code\u003e\u003c/a\u003e chore(deps): bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2941\"\u003e#2941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/abe07818a191cd036dc3824d802d052207e01c7e\"\u003e\u003ccode\u003eabe0781\u003c/code\u003e\u003c/a\u003e Default \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.29 to 0.0.30\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.30\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTreat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator 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/python-multipart/pull/290\"\u003eKludex/python-multipart#290\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003eKludex/python-multipart#291\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/python-multipart/compare/0.0.29...0.0.30\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.30 (2026-05-31)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eParse \u003ccode\u003eapplication/x-www-form-urlencoded\u003c/code\u003e bodies per the WHATWG URL standard, treating only \u003ccode\u003e\u0026amp;\u003c/code\u003e as a field separator \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/290\"\u003e#290\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231/5987 extended parameters (\u003ccode\u003ename*\u003c/code\u003e, \u003ccode\u003efilename*\u003c/code\u003e) in \u003ccode\u003eparse_options_header\u003c/code\u003e, keeping the plain parameter authoritative per \u003ca href=\"https://datatracker.ietf.org/doc/html/rfc7578#section-4.2\"\u003eRFC 7578 §4.2\u003c/a\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003e#291\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/python-multipart/commit/9d3ead568a259f222cff6425262ff63e88d930d4\"\u003e\u003ccode\u003e9d3ead5\u003c/code\u003e\u003c/a\u003e Version 0.0.30 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/292\"\u003e#292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/3506c15ce99cb62faf2d5ceb3c4c1e5800cb843d\"\u003e\u003ccode\u003e3506c15\u003c/code\u003e\u003c/a\u003e Ignore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/291\"\u003e#291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/d69df35cd2cad9c72794c2c340db646afae957d8\"\u003e\u003ccode\u003ed69df35\u003c/code\u003e\u003c/a\u003e Treat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/1e6ff9740b09fb439755f30e2b0e2ada1d297325\"\u003e\u003ccode\u003e1e6ff97\u003c/code\u003e\u003c/a\u003e Bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/289\"\u003e#289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.49 to 2.0.50\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.50\u003c/h1\u003e\n\u003cp\u003eReleased: May 24, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where using \u003ccode\u003e_orm.joinedload()\u003c/code\u003e with\n\u003ccode\u003ePropComparator.of_type()\u003c/code\u003e targeting a joined-table subclass combined\nwith \u003ccode\u003ePropComparator.and_()\u003c/code\u003e referencing a column on that subclass\nwould generate invalid SQL, where the subclass column was not adapted to\nthe subquery alias.  Pull request courtesy Joaquin Hui Gomez.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13203\"\u003e#13203\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where the presence of a \u003ccode\u003eSessionEvents.do_orm_execute()\u003c/code\u003e\nevent hook would cause internal execution options such as \u003ccode\u003eyield_per\u003c/code\u003e and\nloader-specific state from the first \u003ccode\u003eorm_pre_session_exec\u003c/code\u003e pass to leak\ninto the second pass, leading to errors when using relationship loaders\nsuch as \u003ccode\u003eselectinload()\u003c/code\u003e and \u003ccode\u003eimmediateload()\u003c/code\u003e.  The execution\noptions passed to the second compilation pass are now based on the original\noptions plus only the explicit updates made via\n\u003ccode\u003eORMExecuteState.update_execution_options()\u003c/code\u003e within the event hook.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13301\"\u003e#13301\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where using \u003ccode\u003e_orm.with_polymorphic()\u003c/code\u003e on a leaf class (a\nsubclass with no further descendants) or a non-inherited class would fail\nwith an \u003ccode\u003eAttributeError\u003c/code\u003e when used in an ORM statement, due to\n\u003ccode\u003e_orm.configure_mappers()\u003c/code\u003e not being triggered implicitly. The fix\nensures that \u003ccode\u003eAliasedInsp\u003c/code\u003e participates in the \u003ccode\u003e_post_inspect\u003c/code\u003e\nhook, triggering mapper configuration during ORM statement compilation.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13319\"\u003e#13319\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003esql\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[sql] [bug]\u003c/strong\u003e Fixed issue where floor division (\u003ccode\u003e//\u003c/code\u003e) between a \u003ccode\u003eFloat\u003c/code\u003e or\n\u003ccode\u003eNumeric\u003c/code\u003e numerator and an \u003ccode\u003eInteger\u003c/code\u003e denominator would omit\nthe \u003ccode\u003eFLOOR()\u003c/code\u003e SQL wrapper on dialects where\n\u003ccode\u003eDialect.div_is_floordiv\u003c/code\u003e is \u003ccode\u003eTrue\u003c/code\u003e (the default, including\nPostgreSQL and SQLite).  \u003ccode\u003eFLOOR()\u003c/code\u003e is now applied if either the\ndenominator or the numerator is a non-integer, so that expressions such as\n\u003ccode\u003efloat_col // int_col\u003c/code\u003e render as \u003ccode\u003eFLOOR(float_col / int_col)\u003c/code\u003e instead\nof the incorrect \u003ccode\u003efloat_col / int_col\u003c/code\u003e.  Pull request courtesy r266-tech.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/10528\"\u003e#10528\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epostgresql\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\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.2 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.1 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.1...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.20.2 to 1.27.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.20.2...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdf` from 6.10.2 to 6.12.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/releases\"\u003epypdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.12.2, 2026-05-26\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOptimize _decode_png_prediction regarding memory and speed (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3806\"\u003e#3806\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove loop control in text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3805\"\u003e#3805\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.12.1...6.12.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.12.1, 2026-05-22\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit input size and element count for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3796\"\u003e#3796\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent cyclic parent hierarchies for inherited dictionaries (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3795\"\u003e#3795\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeal with invalid first code in LZW decoder (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3794\"\u003e#3794\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.12.0...6.12.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.12.0, 2026-05-21\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDisallow cross-reference streams with zero-only width values (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3791\"\u003e#3791\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid excessive whitespace in layout mode text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3790\"\u003e#3790\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement SASLprep (RFC 4013) for AES-256 password normalization (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3780\"\u003e#3780\u003c/a\u003e) by \u003ca href=\"https://github.com/adityamoolya\"\u003e\u003ccode\u003e@​adityamoolya\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCID font resource from font file to encode more characters (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3652\"\u003e#3652\u003c/a\u003e) by \u003ca href=\"https://github.com/PJBrs\"\u003e\u003ccode\u003e@​PJBrs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements (PI)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOptimize retrieval of named destinatinos in reader (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3442\"\u003e#3442\u003c/a\u003e) by \u003ca href=\"https://github.com/larsga\"\u003e\u003ccode\u003e@​larsga\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes (BUG)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix TreeObject.insert_child KeyError on fresh children (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3786\"\u003e#3786\u003c/a\u003e) by \u003ca href=\"https://github.com/Abzaek\"\u003e\u003ccode\u003e@​Abzaek\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAppearanceStream: Also honor user-set font name when not flattening annotations (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3781\"\u003e#3781\u003c/a\u003e) by \u003ca href=\"https://github.com/PJBrs\"\u003e\u003ccode\u003e@​PJBrs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation (DOC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBlock encrypting writer in incremental mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3789\"\u003e#3789\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.11.0...6.12.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.11.0, 2026-05-09\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eNew Features (ENH)\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/py-pdf/pypdf/blob/main/CHANGELOG.md\"\u003epypdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.12.2, 2026-05-26\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOptimize _decode_png_prediction regarding memory and speed (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3806\"\u003e#3806\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove loop control in text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3805\"\u003e#3805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.12.1...6.12.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.12.1, 2026-05-22\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit input size and element count for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3796\"\u003e#3796\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent cyclic parent hierarchies for inherited dictionaries (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3795\"\u003e#3795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeal with invalid first code in LZW decoder (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3794\"\u003e#3794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.12.0...6.12.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.12.0, 2026-05-21\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDisallow cross-reference streams with zero-only width values (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3791\"\u003e#3791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid excessive whitespace in layout mode text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3790\"\u003e#3790\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement SASLprep (RFC 4013) for AES-256 password normalization (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3780\"\u003e#3780\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCID font resource from font file to encode more characters (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3652\"\u003e#3652\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements (PI)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOptimize retrieval of named destinatinos in reader (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3442\"\u003e#3442\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes (BUG)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix TreeObject.insert_child KeyError on fresh children (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3786\"\u003e#3786\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAppearanceStream: Also honor user-set font name when not flattening annotations (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3781\"\u003e#3781\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation (DOC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBlock encrypting writer in incremental mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3789\"\u003e#3789\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.11.0...6.12.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.11.0, 2026-05-09\u003c/h2\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInitialise a Font from an embedded font file (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3704\"\u003e#3704\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow to fix AES padding length in non-strict mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3742\"\u003e#3742\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/py-pdf/pypdf/commit/efad421b12fe47b269593ffca8e79a71c7aae065\"\u003e\u003ccode\u003eefad421\u003c/code\u003e\u003c/a\u003e REL: 6.12.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/6755d925fae26a79c2f76f5c911bcd728f75a952\"\u003e\u003ccode\u003e6755d92\u003c/code\u003e\u003c/a\u003e SEC: Optimize _decode_png_prediction regarding memory and speed (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3806\"\u003e#3806\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/0b5b8adf02a25b23adae9037ff32d16232936c0f\"\u003e\u003ccode\u003e0b5b8ad\u003c/code\u003e\u003c/a\u003e SEC: Improve loop control in text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3805\"\u003e#3805\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/1a7454f63964946e705407662017cc8bddf91df8\"\u003e\u003ccode\u003e1a7454f\u003c/code\u003e\u003c/a\u003e MAINT: Remove unneeded backslash in re.compile (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3797\"\u003e#3797\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/228780a5c759feae0ed1c2741ad36ba86e0e1475\"\u003e\u003ccode\u003e228780a\u003c/code\u003e\u003c/a\u003e REL: 6.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/62191d5a5c3ee218856d3cbaa039366bc97909f7\"\u003e\u003ccode\u003e62191d5\u003c/code\u003e\u003c/a\u003e SEC: Limit input size and element count for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3796\"\u003e#3796\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/e85263124757d277ed463d737fe830920ba7f1ea\"\u003e\u003ccode\u003ee852631\u003c/code\u003e\u003c/a\u003e ROB: Prevent cyclic parent hierarchies for inherited dictionaries (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3795\"\u003e#3795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/6b4bbcc43e6c357b381751f0aa09fcbd5825cd63\"\u003e\u003ccode\u003e6b4bbcc\u003c/code\u003e\u003c/a\u003e ROB: Deal with invalid first code in LZW decoder (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3794\"\u003e#3794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/20c16d372521cf8485756ad1e4d95021b9c94f79\"\u003e\u003ccode\u003e20c16d3\u003c/code\u003e\u003c/a\u003e TST: Update tests for Python 3.15 support (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3793\"\u003e#3793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-...\n\n_Description has been truncated_","html_url":"https://github.com/skin306152-star/pearnly-app/pull/16","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/skin306152-star%2Fpearnly-app/issues/16","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/16/packages"},{"uuid":"4553680186","node_id":"PR_kwDOSsB6Gs7g6Mhp","number":6,"state":"open","title":"chore(deps): update pymupdf requirement from \u003e=1.23.0 to \u003e=1.27.2.3","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-30T07:18:49.000Z","updated_at":"2026-05-30T07:18:50.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"pymupdf","old_version":"\u003e=1.23.0","new_version":"\u003e=1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.23.0...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/ldkong2077/contract-comparator/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ldkong2077%2Fcontract-comparator/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"},{"uuid":"4513676958","node_id":"PR_kwDOSftIMc7e4DRw","number":14,"state":"closed","title":"chore(deps)(deps): bump the python-patch-minor group across 1 directory with 16 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-01T02:19:23.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-25T01:36:25.000Z","updated_at":"2026-06-01T02:19:24.000Z","time_to_close":607378,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps): bump","group_name":"python-patch-minor","update_count":16,"packages":[{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"sqlalchemy","old_version":"2.0.49","new_version":"2.0.50","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"pymupdf","old_version":"1.20.2","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"pypdf","old_version":"6.10.2","new_version":"6.12.1","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"openai","old_version":"2.32.0","new_version":"2.38.0","repository_url":"https://github.com/openai/openai-python"},{"name":"grpcio-status","old_version":"1.71.2","new_version":"1.80.0"},{"name":"mpmath","old_version":"1.3.0","new_version":"1.4.1","repository_url":"https://github.com/mpmath/mpmath"},{"name":"networkx","old_version":"3.4.2","new_version":"3.6.1","repository_url":"https://github.com/networkx/networkx"},{"name":"numpy","old_version":"2.2.6","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"scikit-image","old_version":"0.25.2","new_version":"0.26.0","repository_url":"https://github.com/scikit-image/scikit-image"},{"name":"scipy","old_version":"1.15.3","new_version":"1.17.1","repository_url":"https://github.com/scipy/scipy"},{"name":"starlette","old_version":"1.0.1","new_version":"1.1.0","repository_url":"https://github.com/Kludex/starlette"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-patch-minor group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.136.3` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.48.0` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.49` | `2.0.50` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.20.2` | `1.27.2.3` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.10.2` | `6.12.1` |\n| [openai](https://github.com/openai/openai-python) | `2.32.0` | `2.38.0` |\n| [grpcio-status](https://grpc.io) | `1.71.2` | `1.80.0` |\n| [mpmath](https://github.com/mpmath/mpmath) | `1.3.0` | `1.4.1` |\n| [networkx](https://github.com/networkx/networkx) | `3.4.2` | `3.6.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.2.6` | `2.4.6` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.47.0` |\n| [scikit-image](https://github.com/scikit-image/scikit-image) | `0.25.2` | `0.26.0` |\n| [scipy](https://github.com/scipy/scipy) | `1.15.3` | `1.17.1` |\n| [starlette](https://github.com/Kludex/starlette) | `1.0.1` | `1.1.0` |\n\n\nUpdates `fastapi` from 0.136.1 to 0.136.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🍱 Update sponsors: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Fix image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✏️ Fix Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15530\"\u003e#15530\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15529\"\u003e#15529\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15528\"\u003e#15528\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15525\"\u003e#15525\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15524\"\u003e#15524\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15522\"\u003e#15522\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15523\"\u003e#15523\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15520\"\u003e#15520\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15521\"\u003e#15521\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\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/fastapi/fastapi/commit/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.47.0 to 0.48.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults 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/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\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.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.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/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\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/73e84e58d7f6b8b3dfd8a9e3e42d716862250f33\"\u003e\u003ccode\u003e73e84e5\u003c/code\u003e\u003c/a\u003e Version 0.48.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45ea11690b4a62fa6df339d2b6ee3b8545a418e0\"\u003e\u003ccode\u003e45ea116\u003c/code\u003e\u003c/a\u003e Ignore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/dd4394c3cbfd9f27a696a7b08047149690058158\"\u003e\u003ccode\u003edd4394c\u003c/code\u003e\u003c/a\u003e chore(deps): bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2941\"\u003e#2941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/abe07818a191cd036dc3824d802d052207e01c7e\"\u003e\u003ccode\u003eabe0781\u003c/code\u003e\u003c/a\u003e Default \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.49 to 2.0.50\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.50\u003c/h1\u003e\n\u003cp\u003eReleased: May 24, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where using \u003ccode\u003e_orm.joinedload()\u003c/code\u003e with\n\u003ccode\u003ePropComparator.of_type()\u003c/code\u003e targeting a joined-table subclass combined\nwith \u003ccode\u003ePropComparator.and_()\u003c/code\u003e referencing a column on that subclass\nwould generate invalid SQL, where the subclass column was not adapted to\nthe subquery alias.  Pull request courtesy Joaquin Hui Gomez.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13203\"\u003e#13203\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where the presence of a \u003ccode\u003eSessionEvents.do_orm_execute()\u003c/code\u003e\nevent hook would cause internal execution options such as \u003ccode\u003eyield_per\u003c/code\u003e and\nloader-specific state from the first \u003ccode\u003eorm_pre_session_exec\u003c/code\u003e pass to leak\ninto the second pass, leading to errors when using relationship loaders\nsuch as \u003ccode\u003eselectinload()\u003c/code\u003e and \u003ccode\u003eimmediateload()\u003c/code\u003e.  The execution\noptions passed to the second compilation pass are now based on the original\noptions plus only the explicit updates made via\n\u003ccode\u003eORMExecuteState.update_execution_options()\u003c/code\u003e within the event hook.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13301\"\u003e#13301\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where using \u003ccode\u003e_orm.with_polymorphic()\u003c/code\u003e on a leaf class (a\nsubclass with no further descendants) or a non-inherited class would fail\nwith an \u003ccode\u003eAttributeError\u003c/code\u003e when used in an ORM statement, due to\n\u003ccode\u003e_orm.configure_mappers()\u003c/code\u003e not being triggered implicitly. The fix\nensures that \u003ccode\u003eAliasedInsp\u003c/code\u003e participates in the \u003ccode\u003e_post_inspect\u003c/code\u003e\nhook, triggering mapper configuration during ORM statement compilation.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13319\"\u003e#13319\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003esql\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[sql] [bug]\u003c/strong\u003e Fixed issue where floor division (\u003ccode\u003e//\u003c/code\u003e) between a \u003ccode\u003eFloat\u003c/code\u003e or\n\u003ccode\u003eNumeric\u003c/code\u003e numerator and an \u003ccode\u003eInteger\u003c/code\u003e denominator would omit\nthe \u003ccode\u003eFLOOR()\u003c/code\u003e SQL wrapper on dialects where\n\u003ccode\u003eDialect.div_is_floordiv\u003c/code\u003e is \u003ccode\u003eTrue\u003c/code\u003e (the default, including\nPostgreSQL and SQLite).  \u003ccode\u003eFLOOR()\u003c/code\u003e is now applied if either the\ndenominator or the numerator is a non-integer, so that expressions such as\n\u003ccode\u003efloat_col // int_col\u003c/code\u003e render as \u003ccode\u003eFLOOR(float_col / int_col)\u003c/code\u003e instead\nof the incorrect \u003ccode\u003efloat_col / int_col\u003c/code\u003e.  Pull request courtesy r266-tech.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/10528\"\u003e#10528\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epostgresql\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\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.2 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.1 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.1...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.20.2 to 1.27.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.20.2...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdf` from 6.10.2 to 6.12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/releases\"\u003epypdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.12.1, 2026-05-22\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit input size and element count for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3796\"\u003e#3796\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent cyclic parent hierarchies for inherited dictionaries (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3795\"\u003e#3795\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeal with invalid first code in LZW decoder (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3794\"\u003e#3794\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.12.0...6.12.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.12.0, 2026-05-21\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDisallow cross-reference streams with zero-only width values (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3791\"\u003e#3791\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid excessive whitespace in layout mode text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3790\"\u003e#3790\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement SASLprep (RFC 4013) for AES-256 password normalization (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3780\"\u003e#3780\u003c/a\u003e) by \u003ca href=\"https://github.com/adityamoolya\"\u003e\u003ccode\u003e@​adityamoolya\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCID font resource from font file to encode more characters (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3652\"\u003e#3652\u003c/a\u003e) by \u003ca href=\"https://github.com/PJBrs\"\u003e\u003ccode\u003e@​PJBrs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements (PI)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOptimize retrieval of named destinatinos in reader (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3442\"\u003e#3442\u003c/a\u003e) by \u003ca href=\"https://github.com/larsga\"\u003e\u003ccode\u003e@​larsga\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes (BUG)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix TreeObject.insert_child KeyError on fresh children (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3786\"\u003e#3786\u003c/a\u003e) by \u003ca href=\"https://github.com/Abzaek\"\u003e\u003ccode\u003e@​Abzaek\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAppearanceStream: Also honor user-set font name when not flattening annotations (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3781\"\u003e#3781\u003c/a\u003e) by \u003ca href=\"https://github.com/PJBrs\"\u003e\u003ccode\u003e@​PJBrs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation (DOC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBlock encrypting writer in incremental mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3789\"\u003e#3789\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.11.0...6.12.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.11.0, 2026-05-09\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInitialise a Font from an embedded font file (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3704\"\u003e#3704\u003c/a\u003e) by \u003ca href=\"https://github.com/PJBrs\"\u003e\u003ccode\u003e@​PJBrs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow to fix AES padding length in non-strict mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3742\"\u003e#3742\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeveloper Experience (DEV)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnable PyPy testing again (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3752\"\u003e#3752\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlign mypy Makefile target with strict mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3690\"\u003e#3690\u003c/a\u003e) by \u003ca href=\"https://github.com/costajohnt\"\u003e\u003ccode\u003e@​costajohnt\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/py-pdf/pypdf/blob/main/CHANGELOG.md\"\u003epypdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.12.1, 2026-05-22\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit input size and element count for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3796\"\u003e#3796\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent cyclic parent hierarchies for inherited dictionaries (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3795\"\u003e#3795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeal with invalid first code in LZW decoder (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3794\"\u003e#3794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.12.0...6.12.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.12.0, 2026-05-21\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDisallow cross-reference streams with zero-only width values (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3791\"\u003e#3791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid excessive whitespace in layout mode text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3790\"\u003e#3790\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement SASLprep (RFC 4013) for AES-256 password normalization (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3780\"\u003e#3780\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCID font resource from font file to encode more characters (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3652\"\u003e#3652\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements (PI)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOptimize retrieval of named destinatinos in reader (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3442\"\u003e#3442\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes (BUG)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix TreeObject.insert_child KeyError on fresh children (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3786\"\u003e#3786\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAppearanceStream: Also honor user-set font name when not flattening annotations (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3781\"\u003e#3781\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation (DOC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBlock encrypting writer in incremental mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3789\"\u003e#3789\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.11.0...6.12.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.11.0, 2026-05-09\u003c/h2\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInitialise a Font from an embedded font file (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3704\"\u003e#3704\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow to fix AES padding length in non-strict mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3742\"\u003e#3742\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeveloper Experience (DEV)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnable PyPy testing again (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3752\"\u003e#3752\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAlign mypy Makefile target with strict mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3690\"\u003e#3690\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.10.2...6.11.0\"\u003eFull Changelog\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/py-pdf/pypdf/commit/228780a5c759feae0ed1c2741ad36ba86e0e1475\"\u003e\u003ccode\u003e228780a\u003c/code\u003e\u003c/a\u003e REL: 6.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/62191d5a5c3ee218856d3cbaa039366bc97909f7\"\u003e\u003ccode\u003e62191d5\u003c/code\u003e\u003c/a\u003e SEC: Limit input size and element count for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3796\"\u003e#3796\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/e85263124757d277ed463d737fe830920ba7f1ea\"\u003e\u003ccode\u003ee852631\u003c/code\u003e\u003c/a\u003e ROB: Prevent cyclic parent hierarchies for inherited dictionaries (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3795\"\u003e#3795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/6b4bbcc43e6c357b381751f0aa09fcbd5825cd63\"\u003e\u003ccode\u003e6b4bbcc\u003c/code\u003e\u003c/a\u003e ROB: Deal with invalid first code in LZW decoder (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3794\"\u003e#3794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/20c16d372521cf8485756ad1e4d95021b9c94f79\"\u003e\u003ccode\u003e20c16d3\u003c/code\u003e\u003c/a\u003e TST: Update tests for Python 3.15 support (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3793\"\u003e#3793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/08eb1435ef2e4d1e3d5fe90636c3cee7aa6f4470\"\u003e\u003ccode\u003e08eb143\u003c/code\u003e\u003c/a\u003e REL: 6.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/507d7c9aa6ea83389b954b9c3c0c528fe5d5da70\"\u003e\u003ccode\u003e507d7c9\u003c/code\u003e\u003c/a\u003e SEC: Disallow cross-reference streams with zero-only width values (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3791\"\u003e#3791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/9d2747057c4afc06ccc0fc6244a3915ba6ea6f0b\"\u003e\u003ccode\u003e9d27470\u003c/code\u003e\u003c/a\u003e SEC: Avoid excessive whitespace in layout mode text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3790\"\u003e#3790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/0a8e699d33ff1d82fae17b7cfa6d01b822be50b2\"\u003e\u003ccode\u003e0a8e699\u003c/code\u003e\u003c/a\u003e DOC: Block encrypting writer in incremental mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3789\"\u003e#3789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/541ebd4e6e0c23dd90f5723210b585655d2a9519\"\u003e\u003ccode\u003e541ebd4\u003c/code\u003e\u003c/a\u003e DEV: Update idna from version 3.10 to 3.15\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.10.2...6.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.32.0 to 2.38.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.38.0\u003c/h2\u003e\n\u003ch2\u003e2.38.0 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.37.0...v2.38.0\"\u003ev2.37.0...v2.38.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e api update (\u003ca href=\"https://github.com/openai/openai-python/commit/33d1d013250053886a73d178136e6bd1b09df059\"\u003e33d1d01\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/a21700a2cd510cb9e6c88065ac8e942d4c041aa8\"\u003ea21700a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update OpenAPI spec or Stainless config (\u003ca href=\"https://github.com/openai/openai-python/commit/00265c5daba4d2481452ad35220f1556dab6bcf6\"\u003e00265c5\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e docs updates (\u003ca href=\"https://github.com/openai/openai-python/commit/ee101520d49e22c09cf8096f8cbb3848ea58a1f9\"\u003eee10152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echeck release PR custom code sync (\u003ca href=\"https://github.com/openai/openai-python/commit/2638779a5b8fffaa8fdb6eebc1d734f15d2491f8\"\u003e2638779\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremove release automation trigger (\u003ca href=\"https://github.com/openai/openai-python/commit/bd6eea559f2996d914258a65e645981bdce3cad4\"\u003ebd6eea5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etrigger release automation (\u003ca href=\"https://github.com/openai/openai-python/commit/f62d08201eea8e08d4bb3385662f934d4adccb29\"\u003ef62d082\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.37.0\u003c/h2\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.36.0\u003c/h2\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.1\u003c/h2\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.38.0 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.37.0...v2.38.0\"\u003ev2.37.0...v2.38.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e api update (\u003ca href=\"https://github.com/openai/openai-python/commit/33d1d013250053886a73d178136e6bd1b09df059\"\u003e33d1d01\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/a21700a2cd510cb9e6c88065ac8e942d4c041aa8\"\u003ea21700a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update OpenAPI spec or Stainless config (\u003ca href=\"https://github.com/openai/openai-python/commit/00265c5daba4d2481452ad35220f1556dab6bcf6\"\u003e00265c5\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e docs updates (\u003ca href=\"https://github.com/openai/openai-python/commit/ee101520d49e22c09cf8096f8cbb3848ea58a1f9\"\u003eee10152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echeck release PR custom code sync (\u003ca href=\"https://github.com/openai/openai-python/commit/2638779a5b8fffaa8fdb6eebc1d734f15d2491f8\"\u003e2638779\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremove release automation trigger (\u003ca href=\"https://github.com/openai/openai-python/commit/bd6eea559f2996d914258a65e645981bdce3cad4\"\u003ebd6eea5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etrigger release automation (\u003ca href=\"https://github.com/openai/openai-python/commit/f62d08201eea8e08d4bb3385662f934d4adccb29\"\u003ef62d082\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/e75766769547601a25ed83b666c4d0fd046881f0\"\u003e\u003ccode\u003ee757667\u003c/code\u003e\u003c/a\u003e release: 2.38.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/b85b647b5312debb951814dfb9ed13f906d6bf43\"\u003e\u003ccode\u003eb85b647\u003c/code\u003e\u003c/a\u003e feat(api): api update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/d881c67866083ae187e14664e289e68a3ba04686\"\u003e\u003ccode\u003ed881c67\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;chore: check release PR custom code sync\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/d4a322816ad637330e40fdcdee9ca48bc92a2a4f\"\u003e\u003ccode\u003ed4a3228\u003c/code\u003e\u003c/a\u003e chore: check release PR custom code sync\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/48888380cdfc01e4f22f9ed7fbd5250231472e0d\"\u003e\u003ccode\u003e4888838\u003c/code\u003e\u003c/a\u003e chore: remove release automation trigger\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/74978f055a7adf004dec718e80bb46241e54d9ca\"\u003e\u003ccode\u003e74978f0\u003c/code\u003e\u003c/a\u003e chore: trigger release automation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/bab18af787cd5d962aedeb4b5b86df4f6cf28003\"\u003e\u003ccode\u003ebab18af\u003c/code\u003e\u003c/a\u003e chore(api): docs updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/a6f899aa1e046dd0cc18b89c4f73260463888db6\"\u003e\u003ccode\u003ea6f899a\u003c/code\u003e\u003c/a\u003e feat(api): manual updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/2897485d445f2924c5c2a8e6a9f40eec633ff345\"\u003e\u003ccode\u003e2897485\u003c/code\u003e\u003c/a\u003e feat(api): update OpenAPI spec or Stainless config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/a2f1d6c56980713619760c60a5c7bfb580b0adcb\"\u003e\u003ccode\u003ea2f1d6c\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.32.0...v2.38.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio-status` from 1.71.2 to 1.80.0\n\nUpdates `mpmath` from 1.3.0 to 1.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mpmath/mpmath/releases\"\u003empmath's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.4.1\u003c/h2\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix test_hexadecimal_with_libc_bulk(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/1049\"\u003e#1049\u003c/a\u003e (Doug Torrance)\u003c/li\u003e\n\u003cli\u003eKeep available deprecated aliases for mpc/mpf_log() (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eUse version_file option of setuptools-scm to keep version info, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/1048\"\u003e#1048\u003c/a\u003e\n(Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd workaround for test on s390x, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/1061\"\u003e#1061\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/mpmath/mpmath/compare/1.4.0...1.4.1\"\u003ehttps://github.com/mpmath/mpmath/compare/1.4.0...1.4.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.4.0\u003c/h2\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport underscores as digit separators per PEP 515, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/661\"\u003e#661\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd rationals converter for mpf's, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/666\"\u003e#666\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eRewrite bernpoly/eulerpoly to avoid dependency on bernoulli(1) convention, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/700\"\u003e#700\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport base kwarg for from_str(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/703\"\u003e#703\u003c/a\u003e (Jonathan Warner, Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport randmatrix() for mp.iv and mp contexts, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/527\"\u003e#527\u003c/a\u003e (Maximilian Gaukler)\u003c/li\u003e\n\u003cli\u003eAdded rank() function for matrices, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/610\"\u003e#610\u003c/a\u003e (Jan-Philipp Hoffmann)\u003c/li\u003e\n\u003cli\u003eAdd plus flag to select the B_1 sign convention for bernoulli/bernfrac, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/724\"\u003e#724\u003c/a\u003e (Jeremy Tan Jie Rui, Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd mpf.as_integer_ratio() method, support construction of mpf from Decimal objects, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/731\"\u003e#731\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eExpose lower/upper_gamma functions, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/740\"\u003e#740\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport mpc initialization from string, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/743\"\u003e#743\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport asinh/acosh/atanh in the fp context, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/750\"\u003e#750\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport binary/octal/hexadecimal string output, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/711\"\u003e#711\u003c/a\u003e (Jonathan Warner, Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport pickling for matrices and mpi, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/761\"\u003e#761\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport matrix.__array__() dunder method, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/767\"\u003e#767\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport more number syntaxes, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/778\"\u003e#778\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eRun mpmath as a module for interactive work, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/773\"\u003e#773\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/923\"\u003e#923\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/931\"\u003e#931\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/936\"\u003e#936\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/939\"\u003e#939\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/954\"\u003e#954\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd signed option to to_man_exp(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/783\"\u003e#783\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd fp.hypot, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/798\"\u003e#798\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport inf/nan's in ctx.almosteq(), \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/802\"\u003e#802\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eImplement mpf.__format__(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/819\"\u003e#819\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/831\"\u003e#831\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/850\"\u003e#850\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/859\"\u003e#859\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/857\"\u003e#857\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/862\"\u003e#862\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/881\"\u003e#881\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/944\"\u003e#944\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/966\"\u003e#966\u003c/a\u003e (Javier Garcia, Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport conversion from scalar ndarray's, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/821\"\u003e#821\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport rounding modes in mpf.__format__, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/823\"\u003e#823\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/831\"\u003e#831\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/834\"\u003e#834\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/969\"\u003e#969\u003c/a\u003e (Javier Garcia, Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport '%' presentation type for mpf, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/847\"\u003e#847\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport gmpy2-like rounding modes in to_str(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/830\"\u003e#830\u003c/a\u003e (Javier Garcia)\u003c/li\u003e\n\u003cli\u003eImplement 'a'/'A' formating types for mpf.__format__, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/841\"\u003e#841\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/870\"\u003e#870\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd mpc.__format__(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/855\"\u003e#855\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eNow mpf.__round__() returns mpf, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/826\"\u003e#826\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/966\"\u003e#966\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport 'b' (binary) format type for mpf/mpc, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/867\"\u003e#867\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eImplement mpf.__floordiv__() and mpf.__divmod__(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/873\"\u003e#873\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd parameters for MPContext constructor, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/876\"\u003e#876\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/963\"\u003e#963\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd MPFR-compatible aliases for rounding modes, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/892\"\u003e#892\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport negative indexes in matrix, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/897\"\u003e#897\u003c/a\u003e (Riccardo Orsi)\u003c/li\u003e\n\u003cli\u003eBetter introspection support for decorated functions, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/900\"\u003e#900\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd moving sofa demo, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/924\"\u003e#924\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport spherica...\n\n_Description has been truncated_","html_url":"https://github.com/skin306152-star/pearnly-app/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/skin306152-star%2Fpearnly-app/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"},{"uuid":"4499516261","node_id":"PR_kwDOSdRzNs7eL8x0","number":13,"state":"closed","title":"chore(deps): bump the production-deps group across 1 directory with 10 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-22T04:45:36.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-22T03:12:06.000Z","updated_at":"2026-05-22T04:45:52.000Z","time_to_close":5610,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"production-deps","update_count":10,"packages":[{"name":"starlette","old_version":"0.49.1","new_version":"1.0.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"uvicorn","old_version":"0.32.1","new_version":"0.47.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydantic","old_version":"2.10.3","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.6.1","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pymupdf","old_version":"1.24.14","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"opencv-python-headless","old_version":"4.10.0.84","new_version":"4.13.0.92","repository_url":"https://github.com/opencv/opencv-python"},{"name":"boto3","old_version":"1.35.76","new_version":"1.43.13","repository_url":"https://github.com/boto/boto3"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.29","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"pip-audit","old_version":"2.9.0","new_version":"2.10.0","repository_url":"https://github.com/pypa/pip-audit"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-deps group with 10 updates in the /services/document-parser directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [starlette](https://github.com/Kludex/starlette) | `0.49.1` | `1.0.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.32.1` | `0.47.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.10.3` | `2.13.4` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.6.1` | `2.14.1` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.24.14` | `1.27.2.3` |\n| [opencv-python-headless](https://github.com/opencv/opencv-python) | `4.10.0.84` | `4.13.0.92` |\n| [boto3](https://github.com/boto/boto3) | `1.35.76` | `1.43.13` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.29` |\n| [pip-audit](https://github.com/pypa/pip-audit) | `2.9.0` | `2.10.0` |\n\n\nUpdates `starlette` from 0.49.1 to 1.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/starlette/releases\"\u003estarlette's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.0.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore malformed \u003ccode\u003eHost\u003c/code\u003e header when constructing \u003ccode\u003erequest.url\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3279\"\u003eKludex/starlette#3279\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/starlette/compare/1.0.0...1.0.1\"\u003ehttps://github.com/Kludex/starlette/compare/1.0.0...1.0.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 1.0.0\u003c/h2\u003e\n\u003cp\u003eStarlette 1.0 is here! 🎉\u003c/p\u003e\n\u003cp\u003eAfter nearly eight years since its creation, Starlette has reached its first stable release.\u003c/p\u003e\n\u003cp\u003eA special thank you to \u003ca href=\"https://github.com/lovelydinosaur\"\u003e\u003ccode\u003e@​lovelydinosaur\u003c/code\u003e\u003c/a\u003e, the creator of Starlette, Uvicorn, HTTPX and MkDocs, whose work helped to lay the foundation for the modern async Python ecosystem. 🙏\u003c/p\u003e\n\u003cp\u003eThank you to \u003ca href=\"https://github.com/adriangb\"\u003e\u003ccode\u003e@​adriangb\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/graingert\"\u003e\u003ccode\u003e@​graingert\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/agronholm\"\u003e\u003ccode\u003e@​agronholm\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/florimondmanca\"\u003e\u003ccode\u003e@​florimondmanca\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/aminalaee\"\u003e\u003ccode\u003e@​aminalaee\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/alex-oleshkevich\"\u003e\u003ccode\u003e@​alex-oleshkevich\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/abersheeran\"\u003e\u003ccode\u003e@​abersheeran\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/uSpike\"\u003e\u003ccode\u003e@​uSpike\u003c/code\u003e\u003c/a\u003e for helping make Starlette what it is today. And to all my sponsors - especially \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/huggingface\"\u003e\u003ccode\u003e@​huggingface\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/elevenlabs\"\u003e\u003ccode\u003e@​elevenlabs\u003c/code\u003e\u003c/a\u003e - thank you for your support!\u003c/p\u003e\n\u003cp\u003eThank you to all \u003ca href=\"https://github.com/encode/starlette/graphs/contributors\"\u003e290+ contributors\u003c/a\u003e who have shaped Starlette over the years! ❤️\u003c/p\u003e\n\u003cp\u003eRead more on the \u003ca href=\"https://marcelotryle.com/blog/2026/03/22/starlette-10-is-here/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCheck out the full release notes at \u003ca href=\"https://www.starlette.io/release-notes/#100-march-22-2026\"\u003ehttps://www.starlette.io/release-notes/#100-march-22-2026\u003c/a\u003e\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/starlette/compare/1.0.0rc1...1.0.0\"\u003ehttps://github.com/encode/starlette/compare/1.0.0rc1...1.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 1.0.0rc1\u003c/h2\u003e\n\u003cp\u003eWe're ready! 🚀\u003c/p\u003e\n\u003cp\u003eThe first release candidate for Starlette 1.0 is here! After years on ZeroVer, we're finally making the jump.\u003c/p\u003e\n\u003cp\u003eThis release removes all deprecated features marked for 1.0.0, along with some last-minute bug fixes.\u003c/p\u003e\n\u003cp\u003eA special thank you to \u003ca href=\"https://github.com/lovelydinosaur\"\u003e\u003ccode\u003e@​lovelydinosaur\u003c/code\u003e\u003c/a\u003e, the creator of Starlette, Uvicorn, HTTPX and MkDocs, whose work helped to lay the foundation for the modern async Python ecosystem. 🙏\u003c/p\u003e\n\u003cp\u003eThank you to \u003ca href=\"https://github.com/adriangb\"\u003e\u003ccode\u003e@​adriangb\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/graingert\"\u003e\u003ccode\u003e@​graingert\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/agronholm\"\u003e\u003ccode\u003e@​agronholm\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/florimondmanca\"\u003e\u003ccode\u003e@​florimondmanca\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/aminalaee\"\u003e\u003ccode\u003e@​aminalaee\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/alex-oleshkevich\"\u003e\u003ccode\u003e@​alex-oleshkevich\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/abersheeran\"\u003e\u003ccode\u003e@​abersheeran\u003c/code\u003e\u003c/a\u003e for helping make Starlette what it is today. And to all my sponsors - especially \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/huggingface\"\u003e\u003ccode\u003e@​huggingface\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/elevenlabs\"\u003e\u003ccode\u003e@​elevenlabs\u003c/code\u003e\u003c/a\u003e - thank you for your support!\u003c/p\u003e\n\u003cp\u003eThank you to all \u003ca href=\"https://github.com/encode/starlette/graphs/contributors\"\u003e290+ contributors\u003c/a\u003e who have shaped Starlette over the years!\u003c/p\u003e\n\u003cp\u003eCheck out the full release notes at \u003ca href=\"https://www.starlette.io/release-notes/#100rc1-february-23-2026\"\u003ehttps://www.starlette.io/release-notes/#100rc1-february-23-2026\u003c/a\u003e\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/starlette/compare/0.52.1...1.0.0rc1\"\u003ehttps://github.com/Kludex/starlette/compare/0.52.1...1.0.0rc1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOnly use \u003ccode\u003etyping_extensions\u003c/code\u003e in older Python versions 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/starlette/pull/3109\"\u003eKludex/starlette#3109\u003c/a\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/starlette/blob/main/docs/release-notes.md\"\u003estarlette's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.1 (May 21, 2026)\u003c/h2\u003e\n\u003ch4\u003eFixed\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore malformed \u003ccode\u003eHost\u003c/code\u003e header when constructing \u003ccode\u003erequest.url\u003c/code\u003e \u003ca href=\"https://redirect.github.com/encode/starlette/pull/3279\"\u003e#3279\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.0 (March 22, 2026)\u003c/h2\u003e\n\u003cp\u003eStarlette 1.0 is here!\u003c/p\u003e\n\u003cp\u003eAfter nearly eight years since its creation, Starlette has reached its first stable release.\nThank you to everyone who tested the release candidate and reported issues.\u003c/p\u003e\n\u003cp\u003eYou can read more on the \u003ca href=\"https://marcelotryle.com/blog/2026/03/22/starlette-10-is-here/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\n\u003ch4\u003eAdded\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTrack session access and modification in \u003ccode\u003eSessionMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/encode/starlette/pull/3166\"\u003e#3166\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixed\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle websocket denial responses in \u003ccode\u003eStreamingResponse\u003c/code\u003e and \u003ccode\u003eFileResponse\u003c/code\u003e \u003ca href=\"https://redirect.github.com/encode/starlette/pull/3189\"\u003e#3189\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for field accumulation in \u003ccode\u003eFormParser\u003c/code\u003e \u003ca href=\"https://redirect.github.com/encode/starlette/pull/3179\"\u003e#3179\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eMove \u003ccode\u003eparser.finalize()\u003c/code\u003e inside try/except in \u003ccode\u003eMultiPartParser.parse()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/encode/starlette/pull/3153\"\u003e#3153\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.0rc1 (February 23, 2026)\u003c/h2\u003e\n\u003cp\u003eWe're ready! I'm thrilled to announce the first release candidate for Starlette 1.0.\u003c/p\u003e\n\u003cp\u003eStarlette was created in June 2018 by Tom Christie, and has been on ZeroVer for years. Today, it's downloaded\nalmost \u003ca href=\"https://pypistats.org/packages/starlette\"\u003e10 million times a day\u003c/a\u003e, serves as the foundation for FastAPI,\nand has inspired many other frameworks. In the age of AI, Starlette continues to play an important role as a\ndependency of the Python MCP SDK.\u003c/p\u003e\n\u003cp\u003eThis release focuses on removing deprecated features that were marked for removal in 1.0.0, along with some\nlast minute bug fixes. It's a release candidate, so we can gather feedback from the community before the final\n1.0.0 release soon.\u003c/p\u003e\n\u003cp\u003eA huge thank you to all the contributors who have helped make Starlette what it is today.\nIn particular, I'd like to recognize:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lovelydinosaur\"\u003eKim Christie\u003c/a\u003e - The original creator of Starlette, Uvicorn, and MkDocs, and the\ncurrent maintainer of HTTPX. Kim's work helped lay the foundation for the modern async Python ecosystem.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adriangb\"\u003eAdrian Garcia Badaracco\u003c/a\u003e - One of the smartest people I know, whom I have the pleasure of working with at Pydantic.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/graingert\"\u003eThomas Grainger\u003c/a\u003e - My async teacher, always ready to help with questions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm\"\u003eAlex Grönholm\u003c/a\u003e - Another async mentor, always prompt to help with questions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/florimondmanca\"\u003eFlorimond Manca\u003c/a\u003e - Always present in the early days of both Starlette and Uvicorn, and helped a lot in the ecosystem.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminalaee\"\u003eAmin Alaee\u003c/a\u003e - Contributed a lot with file-related PRs.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tiangolo\"\u003eSebastián Ramírez\u003c/a\u003e - Maintains FastAPI upstream, and always in contact to help with upstream issues.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/alex-oleshkevich\"\u003eAlex Oleshkevich\u003c/a\u003e - Helped a lot on templates and many discussions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/starlette/commit/48f8e331b23ca692f4713ac1f370bff1b5cd034c\"\u003e\u003ccode\u003e48f8e33\u003c/code\u003e\u003c/a\u003e Version 1.0.1 (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3281\"\u003e#3281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/f078832be1aa27ab0e7ec3153479a347749e967a\"\u003e\u003ccode\u003ef078832\u003c/code\u003e\u003c/a\u003e Remove Hugging Face sponsor block from docs (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3280\"\u003e#3280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/472951eba8f6e35be845fd1b91625a1b5488294b\"\u003e\u003ccode\u003e472951e\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3277\"\u003e#3277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/764dab0dcfb9033d75442d7a359645c9f94648c6\"\u003e\u003ccode\u003e764dab0\u003c/code\u003e\u003c/a\u003e Ignore malformed \u003ccode\u003eHost\u003c/code\u003e header when constructing \u003ccode\u003erequest.url\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3279\"\u003e#3279\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/19d08115ce56da8d4da2838ecdd9c5882cb2b365\"\u003e\u003ccode\u003e19d0811\u003c/code\u003e\u003c/a\u003e Harden GitHub Actions workflows and Dependabot config (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3276\"\u003e#3276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/01f46378120fe2c6312074ed7e997e3b5f7d8c20\"\u003e\u003ccode\u003e01f4637\u003c/code\u003e\u003c/a\u003e chore(deps): bump idna from 3.10 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3274\"\u003e#3274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/b8fa5140d2ef9f22483d777e936ab4c2df897179\"\u003e\u003ccode\u003eb8fa514\u003c/code\u003e\u003c/a\u003e docs: fix typos in TestClient docs and test_requests comment (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3266\"\u003e#3266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/e935b6b5d4616c2317bbdadfb4cf07a8e7637955\"\u003e\u003ccode\u003ee935b6b\u003c/code\u003e\u003c/a\u003e fix uvicorn domain (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3269\"\u003e#3269\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/96af9521a7e46bc0d00b5227186f03b70b6d242f\"\u003e\u003ccode\u003e96af952\u003c/code\u003e\u003c/a\u003e Add 7-day cooldown for dependency resolution via uv exclude-newer (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3265\"\u003e#3265\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/61e385bd6dc438a90493c50f65ed232430f873fb\"\u003e\u003ccode\u003e61e385b\u003c/code\u003e\u003c/a\u003e Add zizmor GitHub Actions security analysis workflow (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3264\"\u003e#3264\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/starlette/compare/0.49.1...1.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.32.1 to 0.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.47.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process 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/2919\"\u003eKludex/uvicorn#2919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration 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/2920\"\u003eKludex/uvicorn#2920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2927\"\u003eKludex/uvicorn#2927\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.46.0...0.47.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio 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/2917\"\u003eKludex/uvicorn#2917\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.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.45.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware 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/2903\"\u003eKludex/uvicorn#2903\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2905\"\u003eKludex/uvicorn#2905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively 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/2907\"\u003eKludex/uvicorn#2907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config 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/2906\"\u003eKludex/uvicorn#2906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert empty context for ASGI runs 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/2911\"\u003eKludex/uvicorn#2911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context 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/2912\"\u003eKludex/uvicorn#2912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2913\"\u003eKludex/uvicorn#2913\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/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2870\"\u003eKludex/uvicorn#2870\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.44.0...0.45.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.44.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplement websocket keepalive pings for websockets-sansio 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/2888\"\u003eKludex/uvicorn#2888\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.43.0...0.44.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.43.0...0.44.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.43.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEmit \u003ccode\u003ehttp.disconnect\u003c/code\u003e ASGI \u003ccode\u003ereceive()\u003c/code\u003e event on server shutting down for streaming responses (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse native \u003ccode\u003econtext\u003c/code\u003e parameter for \u003ccode\u003ecreate_task\u003c/code\u003e on Python 3.11+ (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2859\"\u003e#2859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop cast in ASGI types (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2875\"\u003e#2875\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0\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/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.47.0 (May 14, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2920\"\u003e#2920\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2927\"\u003e#2927\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.45.0 (April 21, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2905\"\u003e#2905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2913\"\u003e#2913\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Explicitly start ASGI run with empty context\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2903\"\u003e#2903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.44.0 (April 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement websocket keepalive pings for websockets-sansio (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2888\"\u003e#2888\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.43.0 (April 3, 2026)\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/Kludex/uvicorn/commit/479a2c0c89186714f1aac52aecdebebf271395ac\"\u003e\u003ccode\u003e479a2c0\u003c/code\u003e\u003c/a\u003e Version 0.47.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2937\"\u003e#2937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/89347fd166ebedf98fb3f806ce8ea44e93b1c2b5\"\u003e\u003ccode\u003e89347fd\u003c/code\u003e\u003c/a\u003e Add 7-day cooldown for dependency resolution via uv exclude-newer (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2936\"\u003e#2936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/767315b38ae509cee9fe8ee9d09f6da920536096\"\u003e\u003ccode\u003e767315b\u003c/code\u003e\u003c/a\u003e Drop unused contents/actions permissions from zizmor workflow (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2935\"\u003e#2935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/f25ee43e68a9678453cbca99ad96f1a447ff34af\"\u003e\u003ccode\u003ef25ee43\u003c/code\u003e\u003c/a\u003e chore(deps): bump urllib3 from 2.6.3 to 2.7.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/8782666189a3d36c978de5698620db705659bf44\"\u003e\u003ccode\u003e8782666\u003c/code\u003e\u003c/a\u003e Fix typo in \u003ccode\u003edocs/deployment/index.md\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2932\"\u003e#2932\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/ad5ff87c869e8a34e9b04fcd5ca38d65c526893c\"\u003e\u003ccode\u003ead5ff87\u003c/code\u003e\u003c/a\u003e Treat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2927\"\u003e#2927\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/6761b2c8f9272fa0e908d0b9cdcb3cb0aa11382f\"\u003e\u003ccode\u003e6761b2c\u003c/code\u003e\u003c/a\u003e Remove Hugging Face sponsor block from docs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2923\"\u003e#2923\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/438f64834de00708a9bb3548a36090e7a924ad84\"\u003e\u003ccode\u003e438f648\u003c/code\u003e\u003c/a\u003e Surface sponsors on welcome page and sidebar (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2921\"\u003e#2921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/10ddc6dd296cb6e432a00835abe27f1c822373c1\"\u003e\u003ccode\u003e10ddc6d\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2920\"\u003e#2920\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b499bc45101d920e691e384025d728507215d4d1\"\u003e\u003ccode\u003eb499bc4\u003c/code\u003e\u003c/a\u003e Eagerly import the ASGI app in the parent process (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.32.1...0.47.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.10.3 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0 2026-04-13\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.4/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.1\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\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/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.10.3...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.6.1 to 2.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/850\"\u003epydantic/pydantic-settings#850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 5 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/854\"\u003epydantic/pydantic-settings#854\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/853\"\u003epydantic/pydantic-settings#853\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/856\"\u003epydantic/pydantic-settings#856\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/858\"\u003epydantic/pydantic-settings#858\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.1 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/859\"\u003epydantic/pydantic-settings#859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix parsing env vars into Optional Strict types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/792\"\u003epydantic/pydantic-settings#792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with mutually recursive models in CLI by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/794\"\u003epydantic/pydantic-settings#794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env_file from model_config ignored in CliApp.run() (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/795\"\u003e#795\u003c/a\u003e) by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/796\"\u003epydantic/pydantic-settings#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/798\"\u003epydantic/pydantic-settings#798\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/801\"\u003epydantic/pydantic-settings#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump samuelcolvin/check-python-version from 4.1 to 5 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/803\"\u003epydantic/pydantic-settings#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 4 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/804\"\u003epydantic/pydantic-settings#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 5 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/805\"\u003epydantic/pydantic-settings#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/806\"\u003epydantic/pydantic-settings#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore chardet and group GitHub Actions in Dependabot by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/808\"\u003epydantic/pydantic-settings#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 4 to 8 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/809\"\u003epydantic/pydantic-settings#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/810\"\u003epydantic/pydantic-settings#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport reading .env files from FIFOs (e.g. 1Password Environments) by \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AliasChoices ignored when changing provider priority by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/813\"\u003epydantic/pydantic-settings#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve KeyError in run_subcommand for underscore field names by \u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/814\"\u003epydantic/pydantic-settings#814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLiteral[numeric Enum]\u003c/code\u003e coercion for CLI and env vars by \u003ca href=\"https://github.com/m9810223\"\u003e\u003ccode\u003e@​m9810223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/811\"\u003epydantic/pydantic-settings#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nested discriminated unions not discovered by env/CLI providers by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/816\"\u003epydantic/pydantic-settings#816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/820\"\u003epydantic/pydantic-settings#820\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCLI ensure env nested max split internally. by \u003ca href=\"https://github.com/kschwab\"\u003e\u003ccode\u003e@​kschwab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/821\"\u003epydantic/pydantic-settings#821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/824\"\u003epydantic/pydantic-settings#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eboto3-stubs\u003c/code\u003e to \u003ccode\u003etypes-boto3\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/831\"\u003epydantic/pydantic-settings#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI not recognizing field name with validate_by_name and AliasChoices by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/826\"\u003epydantic/pydantic-settings#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow customisation of the dotevn setting source to filter variables by \u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/833\"\u003epydantic/pydantic-settings#833\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce yamlfmt by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/836\"\u003epydantic/pydantic-settings#836\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump boto3 from 1.42.82 to 1.42.83 in the python-packages group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/837\"\u003epydantic/pydantic-settings#837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce zizmor by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/838\"\u003epydantic/pydantic-settings#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CliPositionalArg[list[CustomType]] crash for custom types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/839\"\u003epydantic/pydantic-settings#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/842\"\u003epydantic/pydantic-settings#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/844\"\u003epydantic/pydantic-settings#844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/847\"\u003epydantic/pydantic-settings#847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to \u003ccode\u003ejson_schema_extra\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/843\"\u003epydantic/pydantic-settings#843\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/848\"\u003epydantic/pydantic-settings#848\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/e95c30bec8cfaee88ee275138c064aea97a25bdf\"\u003e\u003ccode\u003ee95c30b\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/859\"\u003e#859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/0c8734581b6cf70a995afad603ac456631d00621\"\u003e\u003ccode\u003e0c87345\u003c/code\u003e\u003c/a\u003e Fix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/858\"\u003e#858\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/7bd0072795a800065b42210b6dca90fc9b83daf7\"\u003e\u003ccode\u003e7bd0072\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 2 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/856\"\u003e#856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/b03e573d017ed48e1c2774a5e0b715db9766c76b\"\u003e\u003ccode\u003eb03e573\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/853\"\u003e#853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/eaa3b434938411ec8a3717ea646614561e713f51\"\u003e\u003ccode\u003eeaa3b43\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 5 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/854\"\u003e#854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9f95615c24c6813c1d7d203576581a79cb6d9e8e\"\u003e\u003ccode\u003e9f95615\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/850\"\u003e#850\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3\"\u003e\u003ccode\u003e8916bee\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/848\"\u003e#848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5\"\u003e\u003ccode\u003e39e551c\u003c/code\u003e\u003c/a\u003e Fix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to `json_schema_...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14\"\u003e\u003ccode\u003e9ed7f48\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/847\"\u003e#847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9\"\u003e\u003ccode\u003e617c690\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/844\"\u003e#844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.6.1...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.24.14 to 1.27.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.14...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opencv-python-headless` from 4.10.0.84 to 4.13.0.92\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/opencv/opencv-python/releases\"\u003eopencv-python-headless's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0.92\u003c/h2\u003e\n\u003cp\u003eFollow up release for 4.13.0 with X server dependency fix. See \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/28438\"\u003e#28438\u003c/a\u003e for details.\u003c/p\u003e\n\u003ch2\u003e4.13.0.90\u003c/h2\u003e\n\u003cp\u003eComplete OpenCV 4.13.0 changelog: \u003ca href=\"https://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4130\"\u003ehttps://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4130\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ePython specific:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eManylinux 2_28 support, Numpy 2.4 support, Python 3.14 support\u003c/li\u003e\n\u003cli\u003eTuned Python bindings for logging \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27812\"\u003e#27812\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMarked Feature2D.detectAndCompute mask as optional in Python type stubs \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27544\"\u003e#27544\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMarked distCoeffs/R/D as optional in calib3d functions \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27564\"\u003e#27564\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded DLPACK support \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27581\"\u003e#27581\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27861\"\u003e#27861\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed memory leaks in pybindings \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27738\"\u003e#27738\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd PathLike type hints for args annotated with CV_WRAP_FILE_PATH \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27767\"\u003e#27767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed memory leak in pyopencv_to for path-like objects \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/28047\"\u003e#28047\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTunned Python bindings: use export_name as resolved typename for AliasTypeNode \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27997\"\u003e#27997\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003epython: fix pytest-cov false warnings by using compile() with full file path in exec_file_wrapper \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/28093\"\u003e#28093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed python scalar typing issues \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27620\"\u003e#27620\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed bug in ifdef state machine in header parser for bindings \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27393\"\u003e#27393\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWrap GridType field in cv::findCirclesGrid parameters structure \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27689\"\u003e#27689\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.0.88\u003c/h2\u003e\n\u003cp\u003eComplete OpenCV 4.12.0 changelog: \u003ca href=\"https://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4120\"\u003ehttps://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4120\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ePython:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded libavif to the package and corresponding image format support on Linux and Mac OS. Windows is in progress.\u003c/li\u003e\n\u003cli\u003eEnabled GIF support by default.\u003c/li\u003e\n\u003cli\u003eUpdated Numpy dependency rules. Packages for Python 3.9+ are built with Numpy 2.x. Packages for older Python version are built with Numpy 1.x.\u003c/li\u003e\n\u003cli\u003eImproved libjpeg-turbo performance in Windows builds (added NASM and assembly branches).\u003c/li\u003e\n\u003cli\u003eMade DNN, FLANN, G-API modules optional during the package build (bindings generation and typing).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.11.0.86\u003c/h2\u003e\n\u003cp\u003eComplete OpenCV 4.11.0 changelog: \u003ca href=\"https://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4110\"\u003ehttps://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4110\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ePython:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded Python 3.13 support\u003c/li\u003e\n\u003cli\u003eFixed build with Python 3.12\u003c/li\u003e\n\u003cli\u003eFixed confg path for the case when Python Limited API is disabled\u003c/li\u003e\n\u003cli\u003eFixed build with system wide CMake, if CMake is not available with pip\u003c/li\u003e\n\u003cli\u003eEnabled all jpeg-turbo optimizations on Windows (assembler)\u003c/li\u003e\n\u003cli\u003eSplit Python type stubs per-module to allow modules list customization\u003c/li\u003e\n\u003cli\u003eMinimal Mac OS raised to 13.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/opencv/opencv-python/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.35.76 to 1.43.13\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/97921f4babf469d1c1fbbb27746bbaece6008122\"\u003e\u003ccode\u003e97921f4\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.13'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1307ac2642ed8e53aca983b1c89e952309a0c66d\"\u003e\u003ccode\u003e1307ac2\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/c75c901f5be45cce8e8f46733ee0562d06110c81\"\u003e\u003ccode\u003ec75c901\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d3f2433ff49062a75426c406e606625b69a32eb6\"\u003e\u003ccode\u003ed3f2433\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.12'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d5eddf97fcacb8e8aecf0ff043501ff97454f105\"\u003e\u003ccode\u003ed5eddf9\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.12' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/93f3a42377b288934f08416a9c3b63920d8163c6\"\u003e\u003ccode\u003e93f3a42\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/5355abdca2dfffff34b4e7b05135911845a87631\"\u003e\u003ccode\u003e5355abd\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/9ef5febabaaa8cb403fb3a5e97b0b6d333a0851a\"\u003e\u003ccode\u003e9ef5feb\u003c/code\u003e\u003c/a\u003e Bump idna from 3.7 to 3.15 (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4788\"\u003e#4788\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/c628e75265dc9d48b40a216c72575e46348bbd21\"\u003e\u003ccode\u003ec628e75\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.11'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/210f10744645854d03856c59e73b4db84144dacb\"\u003e\u003ccode\u003e210f107\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.11' into develop\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.35.76...1.43.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.12.1 to 2.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/releases\"\u003epyjwt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13.0\u003c/h2\u003e\n\u003ch1\u003ePyJWT 2.13.0 — Security Release\u003c/h1\u003e\n\u003cp\u003eThis release bundles five security fixes plus three additional hardening / spec-compliance changes. We recommend all users upgrade.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx\"\u003e\u003ccode\u003eGHSA-xgmm-8j9v-c9wx\u003c/code\u003e\u003c/a\u003e — JWK JSON accepted as HMAC secret (algorithm confusion).\u003c/strong\u003e \u003ccode\u003eHMACAlgorithm.prepare_key\u003c/code\u003e previously rejected PEM- and SSH-formatted asymmetric keys but did not catch a JWK passed as a raw JSON string. In a verifier configured with both symmetric and asymmetric algorithms in \u003ccode\u003ealgorithms=[…]\u003c/code\u003e and a raw-JSON JWK as the key, an attacker could forge HS256 tokens using the JWK text as the HMAC secret. The guard has been extended to reject any JWK-shaped JSON. \u003cem\u003eReported by \u003ca href=\"https://github.com/aradona91\"\u003e\u003ccode\u003e@​aradona91\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f\"\u003e\u003ccode\u003eGHSA-jq35-7prp-9v3f\u003c/code\u003e\u003c/a\u003e — Algorithm allow-list bypass with \u003ccode\u003ePyJWK\u003c/code\u003e / \u003ccode\u003ePyJWKClient\u003c/code\u003e.\u003c/strong\u003e When verifying with a \u003ccode\u003ePyJWK\u003c/code\u003e, the caller's \u003ccode\u003ealgorithms=[…]\u003c/code\u003e allow-list was checked against the token header \u003ccode\u003ealg\u003c/code\u003e as a string only; actual verification used the algorithm bound to the \u003ccode\u003ePyJWK\u003c/code\u003e. An attacker who controlled a registered JWKS key could sign with one algorithm and advertise another on the header. PyJWT now requires the token header \u003ccode\u003ealg\u003c/code\u003e to match the \u003ccode\u003ePyJWK\u003c/code\u003e's algorithm before verification. \u003cem\u003eReported by \u003ca href=\"https://github.com/sushi-gif\"\u003e\u003ccode\u003e@​sushi-gif\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39\"\u003e\u003ccode\u003eGHSA-w7vc-732c-9m39\u003c/code\u003e\u003c/a\u003e — DoS via base64 decode of unused payload segment when \u003ccode\u003eb64=false\u003c/code\u003e.\u003c/strong\u003e For detached-payload JWS (\u003ccode\u003eb64=false\u003c/code\u003e), the compact-form payload segment was base64-decoded before being discarded in favor of the caller-supplied \u003ccode\u003edetached_payload\u003c/code\u003e. An attacker could inflate the unused segment to force CPU + memory cost without holding a valid signature. The segment is now required to be empty per RFC 7515 Appendix F, and is no longer decoded. \u003cem\u003eReported by \u003ca href=\"https://github.com/thesmartshadow\"\u003e\u003ccode\u003e@​thesmartshadow\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4\"\u003e\u003ccode\u003eGHSA-993g-76c3-p5m4\u003c/code\u003e\u003c/a\u003e — \u003ccode\u003ePyJWKClient\u003c/code\u003e accepts non-HTTP(S) URIs.\u003c/strong\u003e \u003ccode\u003ePyJWKClient.fetch_data\u003c/code\u003e passed its URI to \u003ccode\u003eurllib.request.urlopen\u003c/code\u003e, which by default also handles \u003ccode\u003efile://\u003c/code\u003e, \u003ccode\u003eftp://\u003c/code\u003e, and \u003ccode\u003edata:\u003c/code\u003e schemes. An application that fed an attacker-influenced URI into \u003ccode\u003ePyJWKClient\u003c/code\u003e could be coerced into reading local files or reaching other unintended schemes. \u003ccode\u003ePyJWKClient\u003c/code\u003e now rejects any URI whose scheme isn't \u003ccode\u003ehttp\u003c/code\u003e or \u003ccode\u003ehttps\u003c/code\u003e. \u003cem\u003eReported by \u003ca href=\"https://github.com/KEIJOT\"\u003e\u003ccode\u003e@​KEIJOT\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8\"\u003e\u003ccode\u003eGHSA-fhv5-28vv-h8m8\u003c/code\u003e\u003c/a\u003e — \u003ccode\u003ePyJWKClient\u003c/code\u003e cache wiped on fetch error.\u003c/strong\u003e A \u003ccode\u003efinally\u003c/code\u003e-block \u003ccode\u003eput(jwk_set=None)\u003c/code\u003e cleared the JWK Set cache whenever a fetch raised, turning a transient JWKS-endpoint outage into application-wide auth failure. The cache write was moved into the success path; transient errors no longer evict valid cached keys. \u003cem\u003eReported by \u003ca href=\"https://github.com/eddieran\"\u003e\u003ccode\u003e@​eddieran\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReject empty HMAC keys outright in \u003ccode\u003eHMACAlgorithm.prepare_key\u003c/code\u003e with \u003ccode\u003eInvalidKeyError\u003c/code\u003e instead of accepting them with only a warning. Defends against the \u003ccode\u003eos.getenv(\u0026quot;JWT_SECRET\u0026quot;, \u0026quot;\u0026quot;)\u003c/code\u003e footgun. \u003cem\u003eThanks to \u003ca href=\"https://github.com/SnailSploit\"\u003e\u003ccode\u003e@​SnailSploit\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/spartan8806\"\u003e\u003ccode\u003e@​spartan8806\u003c/code\u003e\u003c/a\u003e for the reports.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eForward per-call \u003ccode\u003eoptions\u003c/code\u003e (including \u003ccode\u003eenforce_minimum_key_length\u003c/code\u003e) from \u003ccode\u003ePyJWT.decode\u003c/code\u003e through to \u003ccode\u003ePyJWS._verify_signature\u003c/code\u003e. The option was previously silently dropped between the two layers, so it only took effect when set on the \u003ccode\u003ePyJWT\u003c/code\u003e instance. \u003cem\u003eThanks to \u003ca href=\"https://github.com/WLUB\"\u003e\u003ccode\u003e@​WLUB\u003c/code\u003e\u003c/a\u003e for the report.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRFC 7797 §3 compliance for \u003ccode\u003eb64=false\u003c/code\u003e:\u003c/strong\u003e the encoder now auto-adds \u003ccode\u003e\u0026quot;b64\u0026quot;\u003c/code\u003e to \u003ccode\u003ecrit\u003c/code\u003e, and the decoder rejects tokens that set \u003ccode\u003eb64=false\u003c/code\u003e without listing it in \u003ccode\u003ecrit\u003c/code\u003e. \u003cem\u003eThanks to \u003ca href=\"https://github.com/MachineLearning-Nerd\"\u003e\u003ccode\u003e@​MachineLearning-Nerd\u003c/code\u003e\u003c/a\u003e for the report.\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate the \u003ccode\u003edev\u003c/code\u003e, \u003ccode\u003edocs\u003c/code\u003e, and \u003ccode\u003etests\u003c/code\u003e package extras to dependency groups, by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1152\"\u003e#1152\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eUpgrade notes\u003c/h2\u003e\n\u003cp\u003eMost fixes are invisible to correctly-configured callers. A few behavioral changes you may encounter:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEmpty HMAC keys now raise.\u003c/strong\u003e If your app passed \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e or \u003ccode\u003eb\u0026quot;\u0026quot;\u003c/code\u003e as a secret (often via a missing env var, e.g. \u003ccode\u003eos.getenv(\u0026quot;JWT_SECRET\u0026quot;, \u0026quot;\u0026quot;)\u003c/code\u003e), \u003ccode\u003eencode\u003c/code\u003e/\u003ccode\u003edecode\u003c/code\u003e will now raise \u003ccode\u003eInvalidKeyError\u003c/code\u003e. This is the intended behavior — fix the configuration.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePyJWK\u003c/code\u003e decoding now requires the token's \u003ccode\u003ealg\u003c/code\u003e to match the JWK's algorithm.\u003c/strong\u003e Previously a mismatch was silently honored if the header \u003ccode\u003ealg\u003c/code\u003e appeared in the allow-list. Tokens that relied on this mismatch will now fail with \u003ccode\u003eInvalidAlgorithmError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePyJWKClient\u003c/code\u003e now rejects non-HTTP(S) URIs at construction time.\u003c/strong\u003e Tests or dev environments that fetched JWKS from \u003ccode\u003efile://\u003c/code\u003e URIs need to switch to a local HTTP server or load the JWKS by other means (e.g. construct \u003ccode\u003ePyJWKSet.from_dict(...)\u003c/code\u003e directly).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eb64=false\u003c/code\u003e tokens are now strictly RFC 7515 / 7797 compliant.\u003c/strong\u003e Tokens with a non-empty compact-form payload segment, or that omit \u003ccode\u003e\u0026quot;b64\u0026quot;\u003c/code\u003e from \u003ccode\u003ecrit\u003c/code\u003e, will be rejected. PyJWT-produced tokens always satisfy both invariants, so round-trips through PyJWT are unaffected.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenforce_minimum_key_length\u003c/code\u003e set per-call now takes effect.\u003c/strong\u003e Callers who passed \u003ccode\u003eoptions={\u0026quot;enforce_minimum_key_length\u0026quot;: True}\u003c/code\u003e to \u003ccode\u003ejwt.decode()\u003c/code\u003e previously got no enforce...\n\n_Description has been truncated_\n\n\u003c!-- This is an auto-generated comment: release notes by coderabbit.ai --\u003e\n\n## Summary by CodeRabbit\n\n* **Chores**\n  * Updated multiple application dependencies to newer versions for improved stability and performance.\n  * Upgraded security auditing tooling to the latest release.\n\n\u003c!-- review_stack_entry_start --\u003e\n\n[![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/Automation-Architecture/au-group/pull/13?utm_source=github_walkthrough\u0026utm_medium=github\u0026utm_campaign=change_stack)\n\n\u003c!-- review_stack_entry_end --\u003e\n\n\u003c!-- end of auto-generated comment: release notes by coderabbit.ai --\u003e","html_url":"https://github.com/Automation-Architecture/au-group/pull/13","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Automation-Architecture%2Fau-group/issues/13","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/13/packages"},{"uuid":"4465760707","node_id":"PR_kwDOAGnegs7cexMl","number":1345,"state":"closed","title":"Update pymupdf requirement from \u003e=1.26.1 to \u003e=1.27.2.3","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-18T04:33:06.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-18T02:03:13.000Z","updated_at":"2026-05-18T04:33:08.000Z","time_to_close":8993,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"pymupdf","old_version":"\u003e=1.26.1","new_version":"\u003e=1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.1...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/ciromattia/kcc/pull/1345","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciromattia%2Fkcc/issues/1345","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1345/packages"},{"uuid":"4464825372","node_id":"PR_kwDOSIAG287cb6Go","number":45,"state":"open","title":"chore(deps): bump the all group in /gateway with 5 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-17T20:22:22.000Z","updated_at":"2026-05-17T20:23:39.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"all","update_count":5,"packages":[{"name":"websocket-client","old_version":"1.8.0","new_version":"1.9.0","repository_url":"https://github.com/websocket-client/websocket-client"},{"name":"websockify","old_version":"0.12.0","new_version":"0.13.0","repository_url":"https://github.com/novnc/websockify"},{"name":"cryptography","old_version":"44.0.0","new_version":"48.0.0","repository_url":"https://github.com/pyca/cryptography"},{"name":"pymupdf","old_version":"1.25.3","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"python-docx","old_version":"1.1.2","new_version":"1.2.0","repository_url":"https://github.com/python-openxml/python-docx"}],"path":"/gateway","ecosystem":"pip"},"body":"Bumps the all group in /gateway with 5 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [websocket-client](https://github.com/websocket-client/websocket-client) | `1.8.0` | `1.9.0` |\n| [websockify](https://github.com/novnc/websockify) | `0.12.0` | `0.13.0` |\n| [cryptography](https://github.com/pyca/cryptography) | `44.0.0` | `48.0.0` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.25.3` | `1.27.2.3` |\n| [python-docx](https://github.com/python-openxml/python-docx) | `1.1.2` | `1.2.0` |\n\nUpdates `websocket-client` from 1.8.0 to 1.9.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/websocket-client/websocket-client/releases\"\u003ewebsocket-client's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.9.0\u003c/h2\u003e\n\u003cp\u003e1.9.0\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/websocket-client/websocket-client/blob/master/ChangeLog\"\u003ewebsocket-client's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e1.9.0\n\u003cul\u003e\n\u003cli\u003eRemove Python 3.8 support (EOL), add Python 3.13 (5f25030)\u003c/li\u003e\n\u003cli\u003eRemove localhost and 127.0.0.1 from default NO_PROXY list (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/994\"\u003e#994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport IPv6 CIDRs in the no_proxy option (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1033\"\u003e#1033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix thread safety condition in \u003ccode\u003eteardown()\u003c/code\u003e to improve \u003ccode\u003erun_forever()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1015\"\u003e#1015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1024\"\u003e#1024\u003c/a\u003e by chunking data, recursion in on_error callback, thread leak in \u003ccode\u003e_stop_ping_thread()\u003c/code\u003e, avoid implicit None in \u003ccode\u003erecv()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid bare except clauses for better error handling (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix async (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/983\"\u003e#983\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve mypy type errors (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/996\"\u003e#996\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1006\"\u003e#1006\u003c/a\u003e, 813d570)\u003c/li\u003e\n\u003cli\u003eTest coverage improvements (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1035\"\u003e#1035\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eflake8 linting improvements (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1034\"\u003e#1034\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/websocket-client/websocket-client/commit/e46a8fe2dbc74f88a2cfa749f2499f7cc6f31409\"\u003e\u003ccode\u003ee46a8fe\u003c/code\u003e\u003c/a\u003e 1.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/ab81eab9c89da8848cabe8057afc921eed8f78b3\"\u003e\u003ccode\u003eab81eab\u003c/code\u003e\u003c/a\u003e Bug fixes (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/63058ab33be55dd955f25a403da92372394309fc\"\u003e\u003ccode\u003e63058ab\u003c/code\u003e\u003c/a\u003e Run forever socket close fix (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1015\"\u003e#1015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/6861ee417b65c183a81671bc57cace26c9c7ee29\"\u003e\u003ccode\u003e6861ee4\u003c/code\u003e\u003c/a\u003e Use ipaddress module for no_proxy parsing (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1033\"\u003e#1033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/729bdb8fc063397d298261ed6f2288f272b7f6de\"\u003e\u003ccode\u003e729bdb8\u003c/code\u003e\u003c/a\u003e Coverage improvements (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1035\"\u003e#1035\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/f22579afed961d89a306d0018f373922bf567d22\"\u003e\u003ccode\u003ef22579a\u003c/code\u003e\u003c/a\u003e Linting improvements (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/9564030bed1112497bf1c879673870419365a064\"\u003e\u003ccode\u003e9564030\u003c/code\u003e\u003c/a\u003e Change echo URL in docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/c0fe0f7a18867599c9b62fc61f71036a8d5bdfcf\"\u003e\u003ccode\u003ec0fe0f7\u003c/code\u003e\u003c/a\u003e apply black formatting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/813d570fc95114aa48e8ddf8b767390a1a6985f7\"\u003e\u003ccode\u003e813d570\u003c/code\u003e\u003c/a\u003e Resolve all mypy errors, with AI assistance\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/6020f37e784b77f6627b38797595f038aa76f26e\"\u003e\u003ccode\u003e6020f37\u003c/code\u003e\u003c/a\u003e black formatting fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/websocket-client/websocket-client/compare/v1.8.0...v1.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `websockify` from 0.12.0 to 0.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/novnc/websockify/releases\"\u003ewebsockify's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.13.0\u003c/h2\u003e\n\u003ch1\u003eMajor Changes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python \u0026lt; 3.6 has been dropped.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\"\u003eSNI\u003c/a\u003e is enabled when connecting to an SSL target as an SSL client.\u003c/li\u003e\n\u003cli\u003eThe TokenRedis plugin handles namespaces.\u003c/li\u003e\n\u003cli\u003eHeaders are sanitized before being passed to authentication plugins.\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/novnc/websockify/blob/master/CHANGES.txt\"\u003ewebsockify's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.13.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python \u0026lt; 3.6 has been dropped.\u003c/li\u003e\n\u003cli\u003eSNI is enabled when connecting to an SSL target as an SSL client.\u003c/li\u003e\n\u003cli\u003eThe TokenRedis plugin handles namespaces.\u003c/li\u003e\n\u003cli\u003eHeaders are sanitized before being passed to authentication plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/e81894751365afc19fe64fc9d0e5c6fc52655c36\"\u003e\u003ccode\u003ee818947\u003c/code\u003e\u003c/a\u003e websockify 0.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/0d519b9c18139bcdee7f1bdb9dc785be26bdab29\"\u003e\u003ccode\u003e0d519b9\u003c/code\u003e\u003c/a\u003e Fix fake headers dict in tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/187e204ce403e7aac0ea67348eaad012a68f10bb\"\u003e\u003ccode\u003e187e204\u003c/code\u003e\u003c/a\u003e Clear out sensitive fake headers from client\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/417210f2cf8db9cd3cd9d86c45ef954778176b0e\"\u003e\u003ccode\u003e417210f\u003c/code\u003e\u003c/a\u003e Merge branch 'master' of \u003ca href=\"https://github.com/so-saf/websockify\"\u003ehttps://github.com/so-saf/websockify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/245fd08e52604c76e877c94da1dc286f87c90c75\"\u003e\u003ccode\u003e245fd08\u003c/code\u003e\u003c/a\u003e Use standard line endings in sysloghandler.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/3f205f7cc6131368631c8b0cb17c3aa5689507e9\"\u003e\u003ccode\u003e3f205f7\u003c/code\u003e\u003c/a\u003e drop python\u0026lt;3.6 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/0af3404ec91ae827275af0a8e474add5afffaf81\"\u003e\u003ccode\u003e0af3404\u003c/code\u003e\u003c/a\u003e Add namespace value to TokenRedis source\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/5989d31ebf1a84bc6c6bdb7b32b4a9ea5437f36d\"\u003e\u003ccode\u003e5989d31\u003c/code\u003e\u003c/a\u003e Add namespace value to TokenRedis source\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/b6c02b13e3ce706dff6f96f754ef1682d9062258\"\u003e\u003ccode\u003eb6c02b1\u003c/code\u003e\u003c/a\u003e Include host in TLS setup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/f632fa0285181c1ff1a39c9c4b36795e3f6d9373\"\u003e\u003ccode\u003ef632fa0\u003c/code\u003e\u003c/a\u003e Use SSLContext.wrap_context() for SSL/TLS sockets\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/novnc/websockify/compare/v0.12.0...v0.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 44.0.0 to 48.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e48.0.0 - 2026-05-04\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **BACKWARDS INCOMPATIBLE:** Support for Python 3.8 has been removed.\n  ``cryptography`` now requires Python 3.9 or later.\n* **BACKWARDS INCOMPATIBLE:** Loading an X.509 CRL whose inner\n  ``TBSCertList.signature`` algorithm does not match the outer\n  ``signatureAlgorithm`` now raises ``ValueError``. Previously, such CRLs\n  were parsed successfully and only rejected during signature validation.\n* Added support for :doc:`/hazmat/primitives/asymmetric/mlkem` and\n  :doc:`/hazmat/primitives/asymmetric/mldsa` when using OpenSSL 3.5.0 or\n  later, in addition to the existing AWS-LC and BoringSSL support. This means\n  post-quantum algorithms are now available to users of our wheels.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eNote:\u003c/strong\u003e Going forward, we do not guarantee that all functionality\u003cbr /\u003e\nin \u003ccode\u003ecryptography\u003c/code\u003e will be available when building against\u003cbr /\u003e\nOpenSSL. See :doc:\u003ccode\u003e/statements/state-of-openssl\u003c/code\u003e for more information.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v47-0-0:\u003c/p\u003e\n\u003cp\u003e47.0.0 - 2026-04-24\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.8 is deprecated and will be removed in the next\n\u003ccode\u003ecryptography\u003c/code\u003e release.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Support for binary elliptic curves\n(\u003ccode\u003eSECT*\u003c/code\u003e classes) has been removed. These curves are rarely used and\nhave additional security considerations that make them undesirable.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Support for OpenSSL 1.1.x has been removed.\nOpenSSL 3.0.0 or later is now required. LibreSSL, BoringSSL, and AWS-LC\ncontinue to be supported.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Dropped support for LibreSSL \u0026lt; 4.1.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Loading keys with unsupported algorithms or\nkeys with unsupported explicit curve encodings now raises\n:class:\u003ccode\u003e~cryptography.exceptions.UnsupportedAlgorithm\u003c/code\u003e instead of\n\u003ccode\u003eValueError\u003c/code\u003e. This change affects\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_pem_private_key\u003c/code\u003e,\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_der_private_key\u003c/code\u003e,\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_pem_public_key\u003c/code\u003e,\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_der_public_key\u003c/code\u003e,\nand :meth:\u003ccode\u003e~cryptography.x509.Certificate.public_key\u003c/code\u003e when called on\ncertificates with unsupported public key algorithms.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e When parsing elliptic curve private keys, we now\nreject keys that incorrectly encode a private key of the wrong length because\nsuch keys are impossible to process in a constant-time manner. We do not\nbelieve keys with this problem are in wide use, however we may revert this\nchange based on the feedback we receive.\u003c/li\u003e\n\u003cli\u003eDeprecated passing 64-bit (8-byte) and 128-bit (16-byte) keys to\n:class:\u003ccode\u003e~cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES\u003c/code\u003e. In a\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/8e03e30e3aae01632a697e903e3593c924f0139d\"\u003e\u003ccode\u003e8e03e30\u003c/code\u003e\u003c/a\u003e bump for 48.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14796\"\u003e#14796\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/295e0d254ef31ab864730aa41312ec355416ee71\"\u003e\u003ccode\u003e295e0d2\u003c/code\u003e\u003c/a\u003e Add AGENTS.md with CLAUDE.md symlink (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14794\"\u003e#14794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/104a2de19e268a433e6da92be9cb872dcf0003c8\"\u003e\u003ccode\u003e104a2de\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14793\"\u003e#14793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67ec1e51988195e17993d2edef5258b27509b926\"\u003e\u003ccode\u003e67ec1e5\u003c/code\u003e\u003c/a\u003e call check_length early on AesSiv::encrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14792\"\u003e#14792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/b2da57a0d9e4bfd2b95364299091a18f74127b26\"\u003e\u003ccode\u003eb2da57a\u003c/code\u003e\u003c/a\u003e changelog for mldsa/mlkem for openssl (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14791\"\u003e#14791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/3cf44adee25c368d4a136e072fa9f80465d91eb0\"\u003e\u003ccode\u003e3cf44ad\u003c/code\u003e\u003c/a\u003e ML-KEM OpenSSL support (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14781\"\u003e#14781\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2e31639666766f846fbab2c605879db0fa64fe83\"\u003e\u003ccode\u003e2e31639\u003c/code\u003e\u003c/a\u003e ML-DSA OpenSSL support (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14773\"\u003e#14773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/5affe5a286a986fdf512c4a5cb280d28a96c10e3\"\u003e\u003ccode\u003e5affe5a\u003c/code\u003e\u003c/a\u003e fix rust nightly clippy (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14790\"\u003e#14790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2e73ca448eaf64b6f0d4ffbb794cf96170cef5ec\"\u003e\u003ccode\u003e2e73ca4\u003c/code\u003e\u003c/a\u003e bump rust-openssl dep and update EcPoint::mul_generator to mul_generator2 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/82ebd3b9f49d49ad5fd8b4b1f1dd02487b6e1466\"\u003e\u003ccode\u003e82ebd3b\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14785\"\u003e#14785\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/44.0.0...48.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.25.3 to 1.27.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.25.3...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-docx` from 1.1.2 to 1.2.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-openxml/python-docx/blob/master/HISTORY.rst\"\u003epython-docx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e1.2.0 (2025-06-16)\n++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for comments\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8, add testing for Python 3.13\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/e45454602b53e8e572b179ccf1c91093ec9f4ed7\"\u003e\u003ccode\u003ee454546\u003c/code\u003e\u003c/a\u003e release: prepare v1.2.0 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/1fe660198aab18a421c95d019f53b2aa22d2fe2f\"\u003e\u003ccode\u003e1fe6601\u003c/code\u003e\u003c/a\u003e build: small adjustments for tox\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/4fbe1f684e08aa7eebb0ce6bfedfce512b5c95a2\"\u003e\u003ccode\u003e4fbe1f6\u003c/code\u003e\u003c/a\u003e docs: add Comments docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/a809d6cc8aec18648850d8b94d554f05621e433a\"\u003e\u003ccode\u003ea809d6c\u003c/code\u003e\u003c/a\u003e comments: add Comment.text\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/e3a321d26195fdd6e368f59b63be06b1277dac14\"\u003e\u003ccode\u003ee3a321d\u003c/code\u003e\u003c/a\u003e comments: add Run.mark_comment_range()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/af3b973dd2c938f6851537978fe76f4f5e91dcc9\"\u003e\u003ccode\u003eaf3b973\u003c/code\u003e\u003c/a\u003e comments: add Document.add_comment()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/66da52204db395466cc7ea033af0f5bffd228953\"\u003e\u003ccode\u003e66da522\u003c/code\u003e\u003c/a\u003e xfail: acceptance test for Document.add_comment()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/761f4ccd7751afeeaa5fff5c6f47325c3e0970fa\"\u003e\u003ccode\u003e761f4cc\u003c/code\u003e\u003c/a\u003e comments: add Comment.author, .initials setters\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/8ac9fc4f6b50b9b7f208974e853f1995d63a834a\"\u003e\u003ccode\u003e8ac9fc4\u003c/code\u003e\u003c/a\u003e comments: add Comments.add_comment()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/d360409273a9fdfd2d6a26a7f35b8f3bfc781f04\"\u003e\u003ccode\u003ed360409\u003c/code\u003e\u003c/a\u003e xfail: acceptance test for Comment mutations\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-openxml/python-docx/compare/v1.1.2...v1.2.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/yourhq/yourhq/pull/45","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/yourhq%2Fyourhq/issues/45","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/45/packages"},{"uuid":"4419796980","node_id":"PR_kwDOSaLNIs7aMcVi","number":1,"state":"closed","title":"chore(deps): Bump pymupdf from 1.26.5 to 1.26.7","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-12T01:47:12.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-11T09:54:10.000Z","updated_at":"2026-05-12T01:47:14.000Z","time_to_close":57182,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","packages":[{"name":"pymupdf","old_version":"1.26.5","new_version":"1.26.7","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.26.5 to 1.26.7.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.26.7 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on pypi.org and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e[Linux-aarch64 wheels will be built and uploaded later.]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.26.7\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse MuPDF-1.26.12.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRetrospectively mark \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4756\"\u003e#4756\u003c/a\u003e as fixed in 1.26.6.\u003c/li\u003e\n\u003cli\u003eImproved safety of \u003ccode\u003epymupdf embed-extract\u003c/code\u003e. This now refuses to write to\nan existing file or outside current directory, unless \u003ccode\u003e-output\u003c/code\u003e or new flag\n\u003ccode\u003e-unsafe\u003c/code\u003e is specified.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.26.6 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on pypi.org and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e[Linux-aarch64 wheels will be built and uploaded later.]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.26.6\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.26.11.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupported Python versions are now 3.10-3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4699\"\u003e#4699\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4712\"\u003e#4712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4720\"\u003e#4720\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4742\"\u003e#4742\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4746\"\u003e#4746\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/8264a4b3798d06ec44af2e0e9d2a13abbc94e97d\"\u003e\u003ccode\u003e8264a4b\u003c/code\u003e\u003c/a\u003e tests/test_4767.py: test_4767() disable on github/windows/cibuildwheel.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e68755ff3fcf93b240a6ba41046fe34be33905d8\"\u003e\u003ccode\u003ee68755f\u003c/code\u003e\u003c/a\u003e setup.py changes.txt: upgrade to mupdf-1.26.12 by default.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c0e37f84c83d189a00467506573c21b34b4b6944\"\u003e\u003ccode\u003ec0e37f8\u003c/code\u003e\u003c/a\u003e .github/workflows: cope with end of life of macos-13.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1084c91bdedea2ebae144eb014a1519eb55ed7a2\"\u003e\u003ccode\u003e1084c91\u003c/code\u003e\u003c/a\u003e Docs: Fixes search path for sub-directory paths.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cb7c15cc76ead20c7cb14d5dfcac59d630faeabd\"\u003e\u003ccode\u003ecb7c15c\u003c/code\u003e\u003c/a\u003e Docs: updates ko .mo files.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/715b7c1fd24af4ecafb5b0e60972477c87321138\"\u003e\u003ccode\u003e715b7c1\u003c/code\u003e\u003c/a\u003e Updates language toggle to add Korean option\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/caa8af770156119c799d6fcadbf61e528ed5ee80\"\u003e\u003ccode\u003ecaa8af7\u003c/code\u003e\u003c/a\u003e Adds missing translations for pixmap.po\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/83e3a47497882ce7670f7afd8f33d39c65c44542\"\u003e\u003ccode\u003e83e3a47\u003c/code\u003e\u003c/a\u003e Code syntax error updates.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a22f1216905098b90883706630172696e2850e90\"\u003e\u003ccode\u003ea22f121\u003c/code\u003e\u003c/a\u003e Fix Korean translation errors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bd48f16b278e70e69bd52f3e7f7387cb92973596\"\u003e\u003ccode\u003ebd48f16\u003c/code\u003e\u003c/a\u003e Fix Korean translation errors in tutorial.po\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.5...1.26.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e","html_url":"https://github.com/scalefirstai/QuantumCache/pull/1","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/scalefirstai%2FQuantumCache/issues/1","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1/packages"},{"uuid":"4418185719","node_id":"PR_kwDORlwKcs7aHOV2","number":24,"state":"closed","title":"chore(deps): update pymupdf requirement from \u003c2,\u003e=1.24 to \u003e=1.27.2.3,\u003c2 in /backend","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-12T02:17:54.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-11T04:59:56.000Z","updated_at":"2026-05-12T02:18:04.000Z","time_to_close":76678,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"pymupdf","old_version":"\u003c2,\u003e=1.24","new_version":"\u003e=1.27.2.3,\u003c2","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":"/backend","ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.0...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/Absence0760/project-account-payables/pull/24","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Absence0760%2Fproject-account-payables/issues/24","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/24/packages"},{"uuid":"4396021832","node_id":"PR_kwDOSWewT87ZAL96","number":8,"state":"closed","title":"build(deps): Bump pymupdf from 1.24.11 to 1.27.2.3 in /ingest","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-07T04:02:35.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-07T03:43:44.000Z","updated_at":"2026-05-07T04:02:42.000Z","time_to_close":1131,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Bump","packages":[{"name":"pymupdf","old_version":"1.24.11","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":"/ingest","ecosystem":"pip"},"body":"Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.24.11 to 1.27.2.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.11...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/afly007/rag-docs/pull/8","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/afly007%2Frag-docs/issues/8","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/8/packages"},{"uuid":"4367912780","node_id":"PR_kwDOSSEpB87Xl_Fc","number":12,"state":"closed","title":"chore(deps)(deps): bump the python-minor-and-patch group in /backend with 19 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-02T04:45:50.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-02T04:31:18.000Z","updated_at":"2026-05-02T04:45:52.000Z","time_to_close":872,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps): bump","group_name":"python-minor-and-patch","update_count":19,"packages":[{"name":"fastapi","old_version":"0.104.1","new_version":"0.136.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.24.0","new_version":"0.46.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydantic","old_version":"2.5.0","new_version":"2.13.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.1.0","new_version":"2.14.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"sqlalchemy","old_version":"2.0.23","new_version":"2.0.49","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"alembic","old_version":"1.12.1","new_version":"1.18.4","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"psycopg2-binary","old_version":"2.9.9","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"asyncpg","old_version":"0.29.0","new_version":"0.31.0","repository_url":"https://github.com/MagicStack/asyncpg"},{"name":"python-jose","old_version":"3.3.0","new_version":"3.5.0","repository_url":"https://github.com/mpdavis/python-jose"},{"name":"python-multipart","old_version":"0.0.6","new_version":"0.0.27","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"python-levenshtein","old_version":"0.23.0","new_version":"0.27.3","repository_url":"https://github.com/rapidfuzz/python-Levenshtein"},{"name":"python-docx","old_version":"1.1.0","new_version":"1.2.0","repository_url":"https://github.com/python-openxml/python-docx"},{"name":"openpyxl","old_version":"3.1.2","new_version":"3.1.5"},{"name":"pymupdf","old_version":"1.24.0","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"beautifulsoup4","old_version":"4.12.2","new_version":"4.14.3"},{"name":"markdown","old_version":"3.5.1","new_version":"3.10.2","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"httpx","old_version":"0.25.2","new_version":"0.28.1","repository_url":"https://github.com/encode/httpx"},{"name":"python-dotenv","old_version":"1.0.0","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"loguru","old_version":"0.7.2","new_version":"0.7.3","repository_url":"https://github.com/Delgan/loguru"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps the python-minor-and-patch group in /backend with 19 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.104.1` | `0.136.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.24.0` | `0.46.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.5.0` | `2.13.3` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.1.0` | `2.14.0` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.23` | `2.0.49` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.12.1` | `1.18.4` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.9` | `2.9.12` |\n| [asyncpg](https://github.com/MagicStack/asyncpg) | `0.29.0` | `0.31.0` |\n| [python-jose](https://github.com/mpdavis/python-jose) | `3.3.0` | `3.5.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.6` | `0.0.27` |\n| [python-levenshtein](https://github.com/rapidfuzz/python-Levenshtein) | `0.23.0` | `0.27.3` |\n| [python-docx](https://github.com/python-openxml/python-docx) | `1.1.0` | `1.2.0` |\n| [openpyxl](https://openpyxl.readthedocs.io) | `3.1.2` | `3.1.5` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.24.0` | `1.27.2.3` |\n| [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) | `4.12.2` | `4.14.3` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.5.1` | `3.10.2` |\n| [httpx](https://github.com/encode/httpx) | `0.25.2` | `0.28.1` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.0.0` | `1.2.2` |\n| [loguru](https://github.com/Delgan/loguru) | `0.7.2` | `0.7.3` |\n\nUpdates `fastapi` from 0.104.1 to 0.136.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.136.1\u003c/h2\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Update Pydantic v2 code to address deprecations. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15101\"\u003e#15101\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔨 Tweak translation script. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15174\"\u003e#15174\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump mkdocs-material from 9.7.1 to 9.7.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15408\"\u003e#15408\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump inline-snapshot from 0.31.1 to 0.32.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15409\"\u003e#15409\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pytest-codspeed from 4.3.0 to 4.4.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15407\"\u003e#15407\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pytest-cov from 7.0.0 to 7.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15406\"\u003e#15406\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.14.1 to 3.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15405\"\u003e#15405\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump mypy from 1.19.1 to 1.20.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15410\"\u003e#15410\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump python-dotenv from 1.2.1 to 1.2.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15400\"\u003e#15400\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump starlette from 0.52.1 to 1.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15397\"\u003e#15397\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pygithub from 2.8.1 to 2.9.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15396\"\u003e#15396\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pyjwt from 2.12.0 to 2.12.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15393\"\u003e#15393\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump zizmor from 1.23.1 to 1.24.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15394\"\u003e#15394\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump strawberry-graphql from 0.312.3 to 0.314.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15395\"\u003e#15395\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump python-multipart from 0.0.22 to 0.0.26. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15360\"\u003e#15360\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump authlib from 1.6.9 to 1.6.11. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15373\"\u003e#15373\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump aiohttp from 3.13.3 to 3.13.4. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15282\"\u003e#15282\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pygments from 2.19.2 to 2.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15263\"\u003e#15263\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 10.20.1 to 10.21.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15391\"\u003e#15391\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pillow from 12.1.1 to 12.2.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15333\"\u003e#15333\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pytest from 9.0.2 to 9.0.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15334\"\u003e#15334\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/upload-artifact from 7.0.0 to 7.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15374\"\u003e#15374\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/cache from 5.0.4 to 5.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15385\"\u003e#15385\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove Zuplo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15369\"\u003e#15369\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove Speakeasy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15368\"\u003e#15368\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15316\"\u003e#15316\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.136.0\u003c/h2\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Support free-threaded Python 3.14t. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15149\"\u003e#15149\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.135.4\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔥 Remove April Fool's \u003ccode\u003e@app.vibe()\u003c/code\u003e 🤪. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15363\"\u003e#15363\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump cryptography from 46.0.5 to 46.0.7. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15314\"\u003e#15314\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump strawberry-graphql from 0.307.1 to 0.312.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15309\"\u003e#15309\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔨 Add pre-commit hook to ensure latest release header has date. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15293\"\u003e#15293\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.135.3\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/fastapi/fastapi/commit/e54e5a8980ffa6d7ff68ee7b25a1c46036375521\"\u003e\u003ccode\u003ee54e5a8\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9a8a5fd99902c3b80d4cc94b85e120e2b808825f\"\u003e\u003ccode\u003e9a8a5fd\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7815a32f2ed177b8b786a48b3e0712c05b5c644f\"\u003e\u003ccode\u003e7815a32\u003c/code\u003e\u003c/a\u003e ⬆️ Update Pydantic v2 code to address deprecations (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15101\"\u003e#15101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ef1c927b0558d414e199a666833942a6fabb3a51\"\u003e\u003ccode\u003eef1c927\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/38039e12a86e67f2001b9b7d96c219691d6cb4af\"\u003e\u003ccode\u003e38039e1\u003c/code\u003e\u003c/a\u003e 🔨 Tweak translation script (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15174\"\u003e#15174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4fa826ce0a3b16884a04f51e5aac95d01790b599\"\u003e\u003ccode\u003e4fa826c\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c39415673e621665fdb7bbdde69beba7eb1dfd12\"\u003e\u003ccode\u003ec394156\u003c/code\u003e\u003c/a\u003e ⬆ Bump mkdocs-material from 9.7.1 to 9.7.6 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15408\"\u003e#15408\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ae230ad2f9d90a4e3f6222ff1a5d6e8da41ec0ad\"\u003e\u003ccode\u003eae230ad\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/d9eb39d1a1bf2f6e6e5d3a55088f61c712cb864e\"\u003e\u003ccode\u003ed9eb39d\u003c/code\u003e\u003c/a\u003e ⬆ Bump inline-snapshot from 0.31.1 to 0.32.6 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15409\"\u003e#15409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4f8b5d14d324ae8e15cfae8d85adb4186d4c2175\"\u003e\u003ccode\u003e4f8b5d1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.104.1...0.136.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.24.0 to 0.46.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio 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/2917\"\u003eKludex/uvicorn#2917\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.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.45.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware 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/2903\"\u003eKludex/uvicorn#2903\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2905\"\u003eKludex/uvicorn#2905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively 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/2907\"\u003eKludex/uvicorn#2907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config 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/2906\"\u003eKludex/uvicorn#2906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert empty context for ASGI runs 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/2911\"\u003eKludex/uvicorn#2911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context 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/2912\"\u003eKludex/uvicorn#2912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2913\"\u003eKludex/uvicorn#2913\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/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2870\"\u003eKludex/uvicorn#2870\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.44.0...0.45.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.44.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplement websocket keepalive pings for websockets-sansio 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/2888\"\u003eKludex/uvicorn#2888\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.43.0...0.44.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.43.0...0.44.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.43.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEmit \u003ccode\u003ehttp.disconnect\u003c/code\u003e ASGI \u003ccode\u003ereceive()\u003c/code\u003e event on server shutting down for streaming responses (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse native \u003ccode\u003econtext\u003c/code\u003e parameter for \u003ccode\u003ecreate_task\u003c/code\u003e on Python 3.11+ (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2859\"\u003e#2859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop cast in ASGI types (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2875\"\u003e#2875\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.42.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for request body accumulation to avoid O(n^2) allocation on fragmented bodies (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2845\"\u003e#2845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\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's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.45.0 (April 21, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2905\"\u003e#2905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2913\"\u003e#2913\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Explicitly start ASGI run with empty context\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2903\"\u003e#2903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.44.0 (April 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement websocket keepalive pings for websockets-sansio (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2888\"\u003e#2888\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.43.0 (April 3, 2026)\u003c/h2\u003e\n\u003cp\u003eYou can quit Uvicorn now. We heard you, \u003ca href=\"https://github.com/pamelafox\"\u003e\u003ccode\u003e@​pamelafox\u003c/code\u003e\u003c/a\u003e - all 47 of your Ctrl+C's (thanks for flagging it, and thanks to \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e for the fix 🙏). \u003ca href=\"https://x.com/pamelafox/status/2039097686155227623\"\u003eSee the tweet\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEmit \u003ccode\u003ehttp.disconnect\u003c/code\u003e ASGI \u003ccode\u003ereceive()\u003c/code\u003e event on server shutting down for streaming responses (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse native \u003ccode\u003econtext\u003c/code\u003e parameter for \u003ccode\u003ecreate_task\u003c/code\u003e on Python 3.11+ (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2859\"\u003e#2859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop cast in ASGI types (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2875\"\u003e#2875\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.42.0 (March 16, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for request body accumulation to avoid O(n^2) allocation on fragmented bodies (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2845\"\u003e#2845\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/b224045f5900b7f766743bcb16ba9fc3adea2606\"\u003e\u003ccode\u003eb224045\u003c/code\u003e\u003c/a\u003e Version 0.46.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2918\"\u003e#2918\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7375b5bf66d962186d663e85615d4b4d956bf880\"\u003e\u003ccode\u003e7375b5b\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/d438fb16fe2d23c7bbc2ca7094645cff1f116458\"\u003e\u003ccode\u003ed438fb1\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3e6b96446653d0156434bce529a14c80764c9eda\"\u003e\u003ccode\u003e3e6b964\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2c423bd82be169459ea254a61476de34767e0326\"\u003e\u003ccode\u003e2c423bd\u003c/code\u003e\u003c/a\u003e Version 0.45.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7f027f8e25e47668a9c2ce8b5c21b35054c48d02\"\u003e\u003ccode\u003e7f027f8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/73a80c3cc87de269ed016e584a25e585ae6f2b44\"\u003e\u003ccode\u003e73a80c3\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45c0b568d38e9bf4f2f036bc2d79eb98b0e72f72\"\u003e\u003ccode\u003e45c0b56\u003c/code\u003e\u003c/a\u003e Revert empty context for ASGI runs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/850d92656de0cb5859ee5f6ba252e19ad3d38989\"\u003e\u003ccode\u003e850d926\u003c/code\u003e\u003c/a\u003e Raise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/fdcacb4b83bc686ea1ba9e50ffe5b8cfe49b3e00\"\u003e\u003ccode\u003efdcacb4\u003c/code\u003e\u003c/a\u003e Accept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.24.0...0.46.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.5.0 to 2.13.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0 2026-04-13\u003c/h2\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release contains the updated \u003ccode\u003epydantic.v1\u003c/code\u003e namespace, matching version 1.10.26 which includes support for Python 3.14.\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eSee the beta releases for all changes sinces 2.12.\u003c/p\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd zizmor for GitHub Actions workflow linting by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13039\"\u003e#13039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate jiter to v0.14.0 to fix a segmentation fault on musl Linux by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13064\"\u003e#13064\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.1\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release contains the updated \u003ccode\u003epydantic.v1\u003c/code\u003e namespace, matching version 1.10.26 which includes support for Python 3.14.\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eSee the beta releases for all changes sinces 2.12.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow default factories of private attributes to take validated model data by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13013\"\u003e#13013\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/9e9a11132c980c4ec84ff6d2df06d4c1a55ca8f3\"\u003e\u003ccode\u003e9e9a111\u003c/code\u003e\u003c/a\u003e Fix backported test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1ec8c6aa0cae1c78409c6f31af738a24e16c7124\"\u003e\u003ccode\u003e1ec8c6a\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/fb4f2044436e9fa4ff9745479ce263016a99c4d6\"\u003e\u003ccode\u003efb4f204\u003c/code\u003e\u003c/a\u003e Handle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/ca3ddd1149bd3b14273922a29da174804496a055\"\u003e\u003ccode\u003eca3ddd1\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/000e823a3ab7545b0c6064fde34effdcd02044ab\"\u003e\u003ccode\u003e000e823\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d45d8be3ffb6dfc6d0c64da6980140c91ff841fb\"\u003e\u003ccode\u003ed45d8be\u003c/code\u003e\u003c/a\u003e Prepare release 2.13.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/54aca609ce58e73dfe1c681d93432fbe3a4621da\"\u003e\u003ccode\u003e54aca60\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/46bf4fa648af3a1fbf4603a37f210e9d9c618357\"\u003e\u003ccode\u003e46bf4fa\u003c/code\u003e\u003c/a\u003e Fix Pydantic release workflow (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13067\"\u003e#13067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1b359edab09c623464d23c6fd2503ae5ff276d43\"\u003e\u003ccode\u003e1b359ed\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13065\"\u003e#13065\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b1bf19445d8ac144a7a0e82674d2d87eebab6c18\"\u003e\u003ccode\u003eb1bf194\u003c/code\u003e\u003c/a\u003e Fix model equality when using runtime \u003ccode\u003eextra\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13062\"\u003e#13062\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.5.0...v2.13.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.1.0 to 2.14.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix parsing env vars into Optional Strict types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/792\"\u003epydantic/pydantic-settings#792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with mutually recursive models in CLI by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/794\"\u003epydantic/pydantic-settings#794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env_file from model_config ignored in CliApp.run() (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/795\"\u003e#795\u003c/a\u003e) by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/796\"\u003epydantic/pydantic-settings#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/798\"\u003epydantic/pydantic-settings#798\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/801\"\u003epydantic/pydantic-settings#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump samuelcolvin/check-python-version from 4.1 to 5 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/803\"\u003epydantic/pydantic-settings#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 4 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/804\"\u003epydantic/pydantic-settings#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 5 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/805\"\u003epydantic/pydantic-settings#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/806\"\u003epydantic/pydantic-settings#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore chardet and group GitHub Actions in Dependabot by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/808\"\u003epydantic/pydantic-settings#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 4 to 8 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/809\"\u003epydantic/pydantic-settings#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/810\"\u003epydantic/pydantic-settings#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport reading .env files from FIFOs (e.g. 1Password Environments) by \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AliasChoices ignored when changing provider priority by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/813\"\u003epydantic/pydantic-settings#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve KeyError in run_subcommand for underscore field names by \u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/814\"\u003epydantic/pydantic-settings#814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLiteral[numeric Enum]\u003c/code\u003e coercion for CLI and env vars by \u003ca href=\"https://github.com/m9810223\"\u003e\u003ccode\u003e@​m9810223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/811\"\u003epydantic/pydantic-settings#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nested discriminated unions not discovered by env/CLI providers by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/816\"\u003epydantic/pydantic-settings#816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/820\"\u003epydantic/pydantic-settings#820\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCLI ensure env nested max split internally. by \u003ca href=\"https://github.com/kschwab\"\u003e\u003ccode\u003e@​kschwab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/821\"\u003epydantic/pydantic-settings#821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/824\"\u003epydantic/pydantic-settings#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eboto3-stubs\u003c/code\u003e to \u003ccode\u003etypes-boto3\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/831\"\u003epydantic/pydantic-settings#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI not recognizing field name with validate_by_name and AliasChoices by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/826\"\u003epydantic/pydantic-settings#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow customisation of the dotevn setting source to filter variables by \u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/833\"\u003epydantic/pydantic-settings#833\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce yamlfmt by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/836\"\u003epydantic/pydantic-settings#836\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump boto3 from 1.42.82 to 1.42.83 in the python-packages group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/837\"\u003epydantic/pydantic-settings#837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce zizmor by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/838\"\u003epydantic/pydantic-settings#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CliPositionalArg[list[CustomType]] crash for custom types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/839\"\u003epydantic/pydantic-settings#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/842\"\u003epydantic/pydantic-settings#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/844\"\u003epydantic/pydantic-settings#844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/847\"\u003epydantic/pydantic-settings#847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to \u003ccode\u003ejson_schema_extra\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/843\"\u003epydantic/pydantic-settings#843\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/848\"\u003epydantic/pydantic-settings#848\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/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.0\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression for bool fields since 2.13.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/784\"\u003epydantic/pydantic-settings#784\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with self-referential models in CliApp by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/783\"\u003epydantic/pydantic-settings#783\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3\"\u003e\u003ccode\u003e8916bee\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/848\"\u003e#848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5\"\u003e\u003ccode\u003e39e551c\u003c/code\u003e\u003c/a\u003e Fix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to `json_schema_...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14\"\u003e\u003ccode\u003e9ed7f48\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/847\"\u003e#847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9\"\u003e\u003ccode\u003e617c690\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/844\"\u003e#844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/577c05f7e8ac25904da2381db51ed4ddd4b3e4fe\"\u003e\u003ccode\u003e577c05f\u003c/code\u003e\u003c/a\u003e Add note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/842\"\u003e#842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/2355bc54e9d442ca7916f02de28d0c936e75441c\"\u003e\u003ccode\u003e2355bc5\u003c/code\u003e\u003c/a\u003e Fix CliPositionalArg[list[CustomType]] crash for custom types (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/839\"\u003e#839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/16bd6fd230d6280d52db6ce2a0ffef8f908cc89d\"\u003e\u003ccode\u003e16bd6fd\u003c/code\u003e\u003c/a\u003e Introduce zizmor (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/838\"\u003e#838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/df8b239fe09ba712767bdf378bc90627df375f04\"\u003e\u003ccode\u003edf8b239\u003c/code\u003e\u003c/a\u003e Bump boto3 from 1.42.82 to 1.42.83 in the python-packages group (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/837\"\u003e#837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c5401a27999cd6c0e93925deb0660cd51013c8b1\"\u003e\u003ccode\u003ec5401a2\u003c/code\u003e\u003c/a\u003e Introduce yamlfmt (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/836\"\u003e#836\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/953e28e6cfe9a9e536375d771a4ffd48535a4ab2\"\u003e\u003ccode\u003e953e28e\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/833\"\u003e#833\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.1.0...v2.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.23 to 2.0.49\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.49\u003c/h1\u003e\n\u003cp\u003eReleased: April 3, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003e_orm.Session.get()\u003c/code\u003e would bypass the identity map\nand emit unnecessary SQL when \u003ccode\u003ewith_for_update=False\u003c/code\u003e was passed,\nrather than treating it equivalently to the default of \u003ccode\u003eNone\u003c/code\u003e.\nPull request courtesy of Joshua Swanson.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13176\"\u003e#13176\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where chained \u003ccode\u003e_orm.joinedload()\u003c/code\u003e options would not be\napplied correctly when the final relationship in the chain is declared on a\nbase mapper and accessed through a subclass mapper in a\n\u003ccode\u003e_orm.with_polymorphic()\u003c/code\u003e query. The path registry now correctly\ncomputes the natural path when a property declared on a base class is\naccessed through a path containing a subclass mapper, ensuring the loader\noption can be located during query compilation.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13193\"\u003e#13193\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug] [inheritance]\u003c/strong\u003e Fixed issue where using \u003ccode\u003e_orm.Load.options()\u003c/code\u003e to apply a chained loader\noption such as \u003ccode\u003e_orm.joinedload()\u003c/code\u003e or \u003ccode\u003e_orm.selectinload()\u003c/code\u003e with\n\u003ccode\u003e_orm.PropComparator.of_type()\u003c/code\u003e for a polymorphic relationship would\nnot generate the necessary clauses for the polymorphic subclasses. The\npolymorphic loading strategy is now correctly propagated when using a call\nsuch as \u003ccode\u003ejoinedload(A.b).options(joinedload(B.c.of_type(poly)))\u003c/code\u003e to match\nthe behavior of direct chaining e.g.\n\u003ccode\u003ejoinedload(A.b).joinedload(B.c.of_type(poly))\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13202\"\u003e#13202\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug] [inheritance]\u003c/strong\u003e Fixed issue where using chained loader options such as\n\u003ccode\u003e_orm.selectinload()\u003c/code\u003e after \u003ccode\u003e_orm.joinedload()\u003c/code\u003e with\n\u003ccode\u003e_orm.PropComparator.of_type()\u003c/code\u003e for a polymorphic relationship would\nnot properly apply the chained loader option. The loader option is now\ncorrectly applied when using a call such as\n\u003ccode\u003ejoinedload(A.b.of_type(poly)).selectinload(poly.SubClass.c)\u003c/code\u003e to eagerly\nload related objects.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13209\"\u003e#13209\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etyping\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e[typing] [bug]\u003c/strong\u003e Fixed a typing issue where the typed members of :data:\u003ccode\u003e.func\u003c/code\u003e would return\nthe appropriate class of the same name, however this creates an issue for\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` from 1.12.1 to 1.18.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.18.4\u003c/h1\u003e\n\u003cp\u003eReleased: February 10, 2026\u003c/p\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [operations]\u003c/strong\u003e Reverted the behavior of \u003ccode\u003eOperations.add_column()\u003c/code\u003e that would\nautomatically render the \u0026quot;PRIMARY KEY\u0026quot; keyword inline when a\n\u003ccode\u003eColumn\u003c/code\u003e with \u003ccode\u003eprimary_key=True\u003c/code\u003e is added. The automatic\nbehavior, added in version 1.18.2, is now opt-in via the new\n\u003ccode\u003eOperations.add_column.inline_primary_key\u003c/code\u003e parameter. This\nchange restores the ability to render a PostgreSQL SERIAL column, which is\nrequired to be \u003ccode\u003eprimary_key=True\u003c/code\u003e, while not impacting the ability to\nrender a separate primary key constraint. This also provides consistency\nwith the \u003ccode\u003eOperations.add_column.inline_references\u003c/code\u003e parameter and\ngives users explicit control over SQL generation.\u003c/p\u003e\n\u003cp\u003eTo render PRIMARY KEY inline, use the\n\u003ccode\u003eOperations.add_column.inline_primary_key\u003c/code\u003e parameter set to\n\u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003eop.add_column(\n\u0026quot;my_table\u0026quot;,\nColumn(\u0026quot;id\u0026quot;, Integer, primary_key=True),\ninline_primary_key=True\n)References: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1232\"\u003e#1232\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e1.18.3\u003c/h1\u003e\n\u003cp\u003eReleased: January 29, 2026\u003c/p\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [autogenerate]\u003c/strong\u003e Fixed regression in version 1.18.0 due to \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1771\"\u003e#1771\u003c/a\u003e where autogenerate\nwould raise \u003ccode\u003eNoReferencedTableError\u003c/code\u003e when a foreign key constraint\nreferenced a table that was not part of the initial table load, including\ntables filtered out by the\n\u003ccode\u003eEnvironmentContext.configure.include_name\u003c/code\u003e callable or tables\nin remote schemas that were not included in the initial reflection run.\u003c/p\u003e\n\u003cp\u003eThe change in \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1771\"\u003e#1771\u003c/a\u003e was a performance optimization that eliminated\nadditional reflection queries for tables that were only referenced by\nforeign keys but not explicitly included in the main reflection run.\nHowever, this optimization inadvertently removed the creation of\n\u003ccode\u003eTable\u003c/code\u003e objects for these referenced tables, causing autogenerate\nto fail when processing foreign key constraints that pointed to them.\u003c/p\u003e\n\u003cp\u003eThe fix creates placeholder \u003ccode\u003eTable\u003c/code\u003e objects for foreign key targets\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.9 to 2.9.12\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWheel package bundled with PostgreSQL 16 libpq in order to add support for\nrecent features, such as \u003ccode\u003esslcertmode\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.7\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix propagation of exceptions raised during module initialization\n(:ticket:\u003ccode\u003e[#1598](https://github.com/psycopg/psycopg2/issues/1598)\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/psycopg2/commit/3a6d9d6ddc6b53eaa80b712f5fa6b23abbdc38db\"\u003e\u003ccode\u003e3a6d9d6\u003c/code\u003e\u003c/a\u003e ci: include almalinux in whieel building\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/ebca6bf0f86bc6cbdc86de1eb3a53eaf49966d86\"\u003e\u003ccode\u003eebca6bf\u003c/code\u003e\u003c/a\u003e chore: bump to version 3.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/0196f02cc9512df8de3c941f87d27bda98f9f7af\"\u003e\u003ccode\u003e0196f02\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/cibuildwheel from 3.3.1 to 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d157bdc2235a42dc1742936dbb0f5cfc8e4d2eb7\"\u003e\u003ccode\u003ed157bdc\u003c/code\u003e\u003c/a\u003e build(deps): bump docker/setup-qemu-action from 3 to 4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/7fccc0f5066a40dea530512abbf02621f4182b81\"\u003e\u003ccode\u003e7fccc0f\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d52a61eb2e6095fc1b9891bfcca44ebfac509e55\"\u003e\u003ccode\u003ed52a61e\u003c/code\u003e\u003c/a\u003e chore: bump dependency libraries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/b231d726a01d55e07ec3620b2b82f4a2da37ba62\"\u003e\u003ccode\u003eb231d72\u003c/code\u003e\u003c/a\u003e chore: fix building binary images\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/6d76e8479f0f522c2e07ce0e2701030d8fd63785\"\u003e\u003ccode\u003e6d76e84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg2/issues/1836\"\u003e#1836\u003c/a\u003e from psycopg/fix-1835\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f7e314c7ab418ab9b9956e694956089a49c5c3b9\"\u003e\u003ccode\u003ef7e314c\u003c/code\u003e\u003c/a\u003e fix: overflow in malformed interval\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/eb905c124b75f2a5183d22177b85af20914b0f17\"\u003e\u003ccode\u003eeb905c1\u003c/code\u003e\u003c/a\u003e docs: replace bare except clause with except Exception\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.9...2.9.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asyncpg` from 0.29.0 to 0.31.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/MagicStack/asyncpg/releases\"\u003easyncpg's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.31.0\u003c/h2\u003e\n\u003cp\u003eEnable Python 3.14 with experimental subinterpreter/freethreading\nsupport.\u003c/p\u003e\n\u003ch1\u003eImprovements\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd Python 3.14 support, experimental subinterpreter/freethreading support (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1279\"\u003e#1279\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 9e42642b)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAvoid performing type introspection on known types (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1243\"\u003e#1243\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 5c9986c4)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMake \u003ccode\u003eprepare()\u003c/code\u003e not use named statements by default when cache is disabled (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1245\"\u003e#1245\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 5b14653e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImplement connection service file functionality (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1223\"\u003e#1223\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/AndrewJackson2020\"\u003e\u003ccode\u003e@​AndrewJackson2020\u003c/code\u003e\u003c/a\u003e in 1d63bb15)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix multi port connection string issue (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1222\"\u003e#1222\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/AndrewJackson2020\"\u003e\u003ccode\u003e@​AndrewJackson2020\u003c/code\u003e\u003c/a\u003e in 01c0db7b)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAvoid leaking connections if _can_use_connection fails (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1269\"\u003e#1269\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/yuliy-openai\"\u003e\u003ccode\u003e@​yuliy-openai\u003c/code\u003e\u003c/a\u003e in e94302d2)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eOther\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for EOL Python 3.8 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1281\"\u003e#1281\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 6c2c4904)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.30.0\u003c/h2\u003e\n\u003cp\u003eSupport Python 3.13 and PostgreSQL 17.\u003c/p\u003e\n\u003ch1\u003eImprovements\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eImplement GSSAPI authentication\n(by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in 1d4e5680 for \u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImplement SSPI authentication\n(by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in 1aab2094 for \u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1128\"\u003e#1128\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd initial typings\n(by \u003ca href=\"https://github.com/bryanforbes\"\u003e\u003ccode\u003e@​bryanforbes\u003c/code\u003e\u003c/a\u003e in d42432bf for \u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAllow building with Cython 3\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/MagicStack/asyncpg/commit/71775a67277fc0aa5bd2b9f15e848826d7078c4d\"\u003e\u003ccode\u003e71775a6\u003c/code\u003e\u003c/a\u003e asyncpg v0.31.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/508cae6441968ef7613a623fece7083cce66c2b3\"\u003e\u003ccode\u003e508cae6\u003c/code\u003e\u003c/a\u003e Test on PostgreSQL 18 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1290\"\u003e#1290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/e534e5f15c73525a6509143b3828335517360f1b\"\u003e\u003ccode\u003ee534e5f\u003c/code\u003e\u003c/a\u003e Bump cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/07fe5122a680f5768e39fc28d68c94b185037a52\"\u003e\u003ccode\u003e07fe512\u003c/code\u003e\u003c/a\u003e Bump pgproto\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/648b35f18199ebf2a30009376a6e9060cf7ad789\"\u003e\u003ccode\u003e648b35f\u003c/code\u003e\u003c/a\u003e Bump Cython to 3.2.1 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1288\"\u003e#1288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/9e42642b9110d206706697921b6e697a0972649d\"\u003e\u003ccode\u003e9e42642\u003c/code\u003e\u003c/a\u003e Add Python 3.14 support, experimental subinterpreter/freethreading support (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/6fe1c494ef5c3069fa9149c48bf9f8f2cd69f95e\"\u003e\u003ccode\u003e6fe1c49\u003c/code\u003e\u003c/a\u003e Move development deps away from extras and into dependency groups (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1280\"\u003e#1280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/7a548166c2b23561915c481bd332013e3a415cfb\"\u003e\u003ccode\u003e7a54816\u003c/code\u003e\u003c/a\u003e Fix a couple of missed Python version guards\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/6c2c4904e61b2cd2f502540730a24e246cff2ebd\"\u003e\u003ccode\u003e6c2c490\u003c/code\u003e\u003c/a\u003e Drop support for EOL Python 3.8 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1281\"\u003e#1281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/4c60ae890d1f3800f889679657357f91a6923568\"\u003e\u003ccode\u003e4c60ae8\u003c/code\u003e\u003c/a\u003e Bump version to 0.31.0.dev0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/MagicStack/asyncpg/compare/v0.29.0...v0.31.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-jose` from 3.3.0 to 3.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mpdavis/python-jose/releases\"\u003epython-jose's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8\u003c/li\u003e\n\u003cli\u003eAdded support for Python 3.12 \u0026amp; 3.13\u003c/li\u003e\n\u003cli\u003eUpgrade to pyasn1 0.5.1+\u003c/li\u003e\n\u003cli\u003eUpgrade to pytest and other dependencies\u003c/li\u003e\n\u003cli\u003eAdd RTD config file to silence emailed deprecation warnings\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes and Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove get_random_bytes from cryptography backend\u003c/li\u003e\n\u003cli\u003eDo not use \u003ccode\u003eutc_now\u003c/code\u003e on module level\u003c/li\u003e\n\u003cli\u003eRemove key data (sensitive information) from JWKError exceptions\u003c/li\u003e\n\u003cli\u003eAdded possibility to call jwk.construct() with a private RSA key\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://pypi.org/project/python-jose/3.5.0/\"\u003ehttps://pypi.org/project/python-jose/3.5.0/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.4.0\u003c/h2\u003e\n\u003ch3\u003eNews\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.6 and 3.7\u003c/li\u003e\n\u003cli\u003eAdded support for Python 3.10 and 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes and Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating \u003ccode\u003eCryptographyAESKey::encrypt\u003c/code\u003e to generate 96 bit IVs for GCM block\ncipher mode\u003c/li\u003e\n\u003cli\u003eFix for PEM key comparisons caused by line lengths and new lines\u003c/li\u003e\n\u003cli\u003eFix for CVE-2024-33664 - JWE limited to 250KiB\u003c/li\u003e\n\u003cli\u003eFix for CVE-2024-33663 - signing JWT with public key is now forbidden\u003c/li\u003e\n\u003cli\u003eReplace usage of deprecated datetime.utcnow() with datetime.now(UTC)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eHousekeeping\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated Github Actions Workflows\u003c/li\u003e\n\u003cli\u003eUpdated to use tox 4.x\u003c/li\u003e\n\u003cli\u003eRevise codecov integration\u003c/li\u003e\n\u003cli\u003eFixed DeprecationWarnings\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/mpdavis/python-jose/blob/master/CHANGELOG.md\"\u003epython-jose's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.5.0 -- 2025-05-28\u003c/h2\u003e\n\u003ch3\u003eNews\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8\u003c/li\u003e\n\u003cli\u003eAdded support for Python 3.12 \u0026amp; 3.13\u003c/li\u003e\n\u003cli\u003eUpgrade to pyasn1 0.5.1+\u003c/li\u003e\n\u003cli\u003eUpgrade to pytest and other dependencies\u003c/li\u003e\n\u003cli\u003eAdd RTD config file to silence emailed deprecation warnings\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes and Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove get_random_bytes from cryptography backend\u003c/li\u003e\n\u003cli\u003eDo not use \u003ccode\u003eutc_now\u003c/code\u003e on module level\u003c/li\u003e\n\u003cli\u003eRemove key data (sensitive information) from JWKError exceptions\u003c/li\u003e\n\u003cli\u003eAdded possibility to call jwk.construct() with a private RSA key\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.4.0 -- 2025-02-14\u003c/h2\u003e\n\u003ch3\u003eNews\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.6 and 3.7\u003c/li\u003e\n\u003cli\u003eAdded support for Python 3.10 and 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes and Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating \u003ccode\u003eCryptographyAESKey::encrypt\u003c/code\u003e to generate 96 bit IVs for GCM block\ncipher mode\u003c/li\u003e\n\u003cli\u003eFix for PEM key comparisons caused by line lengths and new lines\u003c/li\u003e\n\u003cli\u003eFix for CVE-2024-33664 - JWE limited to 250KiB\u003c/li\u003e\n\u003cli\u003eFix for CVE-2024-33663 - signing JWT with public key is now forbidden\u003c/li\u003e\n\u003cli\u003eReplace usage of deprecated datetime.utcnow() with datetime.now(UTC)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eHousekeeping\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated Github Actions Workflows\u003c/li\u003e\n\u003cli\u003eUpdated to use tox 4.x\u003c/li\u003e\n\u003cli\u003eRevise codecov integration\u003c/li\u003e\n\u003cli\u003eFixed DeprecationWarnings\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/018b310ddb8b50dcfd09a0c152117835a21dd656\"\u003e\u003ccode\u003e018b310\u003c/code\u003e\u003c/a\u003e Prepare release 3.5.0 (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/388\"\u003e#388\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/393c37476c728782dacc41cd79472627a5b198f3\"\u003e\u003ccode\u003e393c374\u003c/code\u003e\u003c/a\u003e Improve jwt.decode key doc (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/198\"\u003e#198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/50d43908ff5d3c6b48017c5d07b3b95c71ed89d9\"\u003e\u003ccode\u003e50d4390\u003c/code\u003e\u003c/a\u003e utils.py: fix types in docstrings for base64url_encode/decode (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/269\"\u003e#269\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/8fd0b6318643edf9a7eee718d7f978fd04345e06\"\u003e\u003ccode\u003e8fd0b63\u003c/code\u003e\u003c/a\u003e Add RTD config file to silence emailed deprecation warnings (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/6f03385e538b1fbb231780e149c413f102464f37\"\u003e\u003ccode\u003e6f03385\u003c/code\u003e\u003c/a\u003e Added possibility to call jwk.construct() with a private key (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/2f0aca6e2e43b78b6365a19f95e8a5ec7e02a375\"\u003e\u003ccode\u003e2f0aca6\u003c/code\u003e\u003c/a\u003e Add python_requires arg to setup.cfg (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/273\"\u003e#273\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/895777e04ad9c3f7bb3f8bf4a1196244dc9dbb58\"\u003e\u003ccode\u003e895777e\u003c/code\u003e\u003c/a\u003e Updated pyasn version to match latest (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/45bd1248f181f8bef24b12b5b4a6cc262c526413\"\u003e\u003ccode\u003e45bd124\u003c/code\u003e\u003c/a\u003e Update jwk.py (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/328\"\u003e#328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/1f0ae0a208da3950c1fc32b758da7147eb15d072\"\u003e\u003ccode\u003e1f0ae0a\u003c/code\u003e\u003c/a\u003e docs: Fix a few typos (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/ceaac3665de1ed911884f0d1e96227b0a4ce378e\"\u003e\u003ccode\u003eceaac36\u003c/code\u003e\u003c/a\u003e Do not use \u003ccode\u003eutc_now\u003c/code\u003e on module level (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mpdavis/python-jose/compare/3.3.0...3.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.6 to 0.0.27\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.27\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePass parse offsets via constructors 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/python-multipart/pull/268\"\u003eKludex/python-multipart#268\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd multipart header limits 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/python-multipart/pull/267\"\u003eKludex/python-multipart#267\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/python-multipart/compare/0.0.26...0.0.27\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.26\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSkip preamble before first multipart boundary 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/python-multipart/pull/262\"\u003eKludex/python-multipart#262\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilently discard epilogue data after the closing boundary 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/python-multipart/pull/259\"\u003eKludex/python-multipart#259\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/python...\n\n_Description has been truncated_","html_url":"https://github.com/xr843/buddhist-text-collation/pull/12","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/xr843%2Fbuddhist-text-collation/issues/12","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12/packages"},{"uuid":"4354614005","node_id":"PR_kwDOR_KFoM7W7Ddm","number":207,"state":"open","title":"deps(api): update pymupdf requirement from \u003e=1.24.0 to \u003e=1.27.2.3 in /api","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-30T00:56:25.000Z","updated_at":"2026-04-30T01:00:11.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(api): update","packages":[{"name":"pymupdf","old_version":"\u003e=1.24.0","new_version":"\u003e=1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":"/api","ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.0...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/yilinzhang130/BDGO/pull/207","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/yilinzhang130%2FBDGO/issues/207","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/207/packages"},{"uuid":"4332915414","node_id":"PR_kwDOQ5dxIc7V0IyR","number":19,"state":"open","title":"build(deps): update pymupdf requirement from \u003e=1.24.0 to \u003e=1.27.2.3","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-27T03:36:21.000Z","updated_at":"2026-04-27T03:36:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): update","packages":[{"name":"pymupdf","old_version":"\u003e=1.24.0","new_version":"\u003e=1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.0...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/FunnyValentine69/epiassist/pull/19","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/FunnyValentine69%2Fepiassist/issues/19","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/19/packages"},{"uuid":"4265625275","node_id":"PR_kwDOQ1BAOM7Se-3S","number":5,"state":"open","title":"chore(deps): update pymupdf requirement from \u003e=1.24.0 to \u003e=1.27.2.2","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-15T01:07:36.000Z","updated_at":"2026-04-15T01:07:37.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"pymupdf","old_version":"\u003e=1.24.0","new_version":"\u003e=1.27.2.2","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e**Changes in version **\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/75c04018d2a16d39d51876253dca79e94582ce3b\"\u003e\u003ccode\u003e75c0401\u003c/code\u003e\u003c/a\u003e .github/ISSUE_TEMPLATE/bug_report.yml: add next version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/b256056c149bcc98b17baa389d24bd25a70c8967\"\u003e\u003ccode\u003eb256056\u003c/code\u003e\u003c/a\u003e changes.txt: updated for release of version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/f8adc34658e0736d1d71712048e2868eae704de5\"\u003e\u003ccode\u003ef8adc34\u003c/code\u003e\u003c/a\u003e setup.py: incremented version to 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c3d4e89d08d7ef3e034c3fd4dae3d7f421cb1cd1\"\u003e\u003ccode\u003ec3d4e89\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): update to match fixed behaviour in pymupd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e21f733988dacffb7664e61450a4ae3bcb3c41ba\"\u003e\u003ccode\u003ee21f733\u003c/code\u003e\u003c/a\u003e docs/ src/\u003cstrong\u003einit\u003c/strong\u003e.py: improve docs for insert_textbox() methods.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/2f362bd04158e51b681761051f5bbe1163fce042\"\u003e\u003ccode\u003e2f362bd\u003c/code\u003e\u003c/a\u003e Issue 4902: Fix linewidth of stroked text.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/409eede36626461894099a6c0686b28680baf747\"\u003e\u003ccode\u003e409eede\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): new, reproducer for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/ca1a0ac076805c6d033973127ea8dfe2f99c8eed\"\u003e\u003ccode\u003eca1a0ac\u003c/code\u003e\u003c/a\u003e Fix reference to Embedding Appendix in tutorial documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/77e4f3590e3b9e9d0725b5639f99aa11d7596723\"\u003e\u003ccode\u003e77e4f35\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py tests/: Partial fix for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e - exception in Document.scrub().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cb4ce4ceff2c22779c6ced48d5071cd208d8124e\"\u003e\u003ccode\u003ecb4ce4c\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py: add Annot.\u003cstrong\u003ebool\u003c/strong\u003e().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.0...1.27.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/kjayashr/reinforcement-learning/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/kjayashr%2Freinforcement-learning/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"},{"uuid":"4256887333","node_id":"PR_kwDOPTHPGM7SEfFv","number":6,"state":"closed","title":"Bump the python-packages group across 1 directory with 7 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-12T00:13:50.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-13T18:02:26.000Z","updated_at":"2026-05-12T00:13:51.000Z","time_to_close":2441484,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python-packages","update_count":7,"packages":[{"name":"beautifulsoup4","old_version":"4.7.1","new_version":"4.14.3"},{"name":"lxml","old_version":"6.0.0","new_version":"6.0.4","repository_url":"https://github.com/lxml/lxml"},{"name":"xmltodict","old_version":"0.11.0","new_version":"1.0.4","repository_url":"https://github.com/martinblech/xmltodict"},{"name":"pyinstaller","old_version":"6.14.2","new_version":"6.19.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pymupdf","old_version":"1.26.3","new_version":"1.26.5","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"markdown","old_version":"3.8.2","new_version":"3.9","repository_url":"https://github.com/Python-Markdown/markdown"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/), [lxml](https://github.com/lxml/lxml), [xmltodict](https://github.com/martinblech/xmltodict), [pyinstaller](https://github.com/pyinstaller/pyinstaller), [pymupdf](https://github.com/pymupdf/pymupdf), [markdown](https://github.com/Python-Markdown/markdown) and [setuptools](https://github.com/pypa/setuptools) to permit the latest version.\nUpdates `beautifulsoup4` from 4.7.1 to 4.14.3\n\nUpdates `lxml` from 6.0.0 to 6.0.4\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/lxml/lxml/blob/master/CHANGES.txt\"\u003elxml's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e6.0.4 (2026-04-12)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eLP#2148019: Spurious MemoryError during namespace cleanup.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e6.0.3 (2026-04-09)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSeveral out of memory error cases now raise \u003ccode\u003eMemoryError\u003c/code\u003e that were not handled before.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSlicing with large step values (outside of \u003ccode\u003e+/- sys.maxsize\u003c/code\u003e) could trigger undefined C behaviour.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eLP#2125399: Some failing tests were fixed or disabled in PyPy.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eLP#2138421: Memory leak in error cases when setting the \u003ccode\u003epublic_id\u003c/code\u003e or \u003ccode\u003esystem_url\u003c/code\u003e of a document.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMemory leak in case of a memory allocation failure when copying document subtrees.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWhen mapping an XPath result to Python failed, the result memory could leak.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWhen preparing an XSLT transform failed, the XSLT parameter memory could leak.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eOther changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eBuilt using Cython 3.2.4.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBinary wheels use zlib 1.3.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e6.0.2 (2025-09-21)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eLP#2125278: Compilation with libxml2 2.15.0 failed.\nOriginal patch by Xi Ruoyao.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSetting \u003ccode\u003edecompress=True\u003c/code\u003e in the parser had no effect in libxml2 2.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBinary wheels on Linux and macOS use the library version libxml2 2.14.6.\nSee \u003ca href=\"https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.14.6\"\u003ehttps://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.14.6\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/1fd1d6bc300bcd9a41def810c5fc3223811b579e\"\u003e\u003ccode\u003e1fd1d6b\u003c/code\u003e\u003c/a\u003e Fix release date.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/515485906ccdd89b61088e390f65f39e4c205158\"\u003e\u003ccode\u003e5154859\u003c/code\u003e\u003c/a\u003e CI: Include all library versions in libs cache key to asssure updated on vers...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/6a606f32724060fe0465cd38d6fb7e6e22e7ef81\"\u003e\u003ccode\u003e6a606f3\u003c/code\u003e\u003c/a\u003e Add \u0026quot;doesn't crash\u0026quot; tests for LP#2148019.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/f488f16d20014c0dfde59cd2930b41604bcc3c8d\"\u003e\u003ccode\u003ef488f16\u003c/code\u003e\u003c/a\u003e Prepare release of 6.0.4.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/1255d98f168672639c46cb6419a97e31026e8086\"\u003e\u003ccode\u003e1255d98\u003c/code\u003e\u003c/a\u003e LP#2148019: Prevent spurious MemoryError during namespace cleanup.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/03b0c4aa1aded486f2e4a04cf5c329524df73c57\"\u003e\u003ccode\u003e03b0c4a\u003c/code\u003e\u003c/a\u003e Remove dead type check.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/a6f833c7e187c17d5087d29227e066d94490280f\"\u003e\u003ccode\u003ea6f833c\u003c/code\u003e\u003c/a\u003e Fix release date.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/973d059449a66799f468b46f4b12c95e32cff5e9\"\u003e\u003ccode\u003e973d059\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/9044a52ce26a3ccf48b6cad8031234a0ddf7612b\"\u003e\u003ccode\u003e9044a52\u003c/code\u003e\u003c/a\u003e Build: Downgrade libiconv to 1.18 since 1.19 does not build reliably.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/a34dfdd593368fc444f6b66d03fd60d76966c9d2\"\u003e\u003ccode\u003ea34dfdd\u003c/code\u003e\u003c/a\u003e Build: Upgrade libiconv to 1.19.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/lxml/lxml/compare/lxml-6.0.0...lxml-6.0.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xmltodict` from 0.11.0 to 1.0.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/martinblech/xmltodict/releases\"\u003exmltodict's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.0.4\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.3...v1.0.4\"\u003e1.0.4\u003c/a\u003e (2026-02-22)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eunparse:\u003c/strong\u003e add bytes_errors policy and handle bytes scalars consistently (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/ed704344226ed6451f6735811c695fb5004df44d\"\u003eed70434\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.0.3\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.2...v1.0.3\"\u003e1.0.3\u003c/a\u003e (2026-02-15)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eunparse:\u003c/strong\u003e serialize None text/attrs as empty values (fixes \u003ca href=\"https://redirect.github.com/martinblech/xmltodict/issues/401\"\u003e#401\u003c/a\u003e) (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/aa165113bef2b3a1a822209863343b9dc9ffe43a\"\u003eaa16511\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ereadme:\u003c/strong\u003e fix Fedora and Arch package links (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/fd6a73bf606c3932bcc82bf559a70867a1dd75cd\"\u003efd6a73b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.0.2\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.1...v1.0.2\"\u003e1.0.2\u003c/a\u003e (2025-09-17)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eallow DOCTYPE with disable_entities=True (default) (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/25b61a41f580cfc211df07c5fbbf603bd8eb5a5f\"\u003e25b61a4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.0.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.0...v1.0.1\"\u003e1.0.1\u003c/a\u003e (2025-09-17)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efail closed when entities disabled (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/c986d2d37a93d45fcc059b09063d9d9c45a655ec\"\u003ec986d2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003evalidate XML comments (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/3d4d2d3a4cd0f68d1211dba549010261fa87b969\"\u003e3d4d2d3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd SECURITY.md (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/64130233c8fea272a5f82f2f585e1593523ec1b1\"\u003e6413023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify behavior for empty lists (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/2025b5cb5e64fc9c4d54b8644187a0a193bdd0ed\"\u003e2025b5c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify process_comments docs (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/6b464fce284a93dbb292f3d063c9f310a478a014\"\u003e6b464fc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify strip whitespace comment behavior (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/b3e22032d21cc387d6cecf3930116e8fdc3151cf\"\u003eb3e2203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ecreate AGENTS.md for coding agents (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/0da66ee797ced7479312aecef92c6a25e235007c\"\u003e0da66ee\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace travis with actions badge (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/2576b94c918fbd154489a95dbbb3feda8bd3cbd8\"\u003e2576b94\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate CONTRIBUTING.md (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/db3918057cf125af989a1263d52df8df5ef8c642\"\u003edb39180\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.0.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/martinblech/xmltodict/blob/master/CHANGELOG.md\"\u003exmltodict's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.3...v1.0.4\"\u003e1.0.4\u003c/a\u003e (2026-02-22)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eunparse:\u003c/strong\u003e add bytes_errors policy and handle bytes scalars consistently (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/ed704344226ed6451f6735811c695fb5004df44d\"\u003eed70434\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.2...v1.0.3\"\u003e1.0.3\u003c/a\u003e (2026-02-15)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eunparse:\u003c/strong\u003e serialize None text/attrs as empty values (fixes \u003ca href=\"https://redirect.github.com/martinblech/xmltodict/issues/401\"\u003e#401\u003c/a\u003e) (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/aa165113bef2b3a1a822209863343b9dc9ffe43a\"\u003eaa16511\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ereadme:\u003c/strong\u003e fix Fedora and Arch package links (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/fd6a73bf606c3932bcc82bf559a70867a1dd75cd\"\u003efd6a73b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.1...v1.0.2\"\u003e1.0.2\u003c/a\u003e (2025-09-17)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eallow DOCTYPE with disable_entities=True (default) (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/25b61a41f580cfc211df07c5fbbf603bd8eb5a5f\"\u003e25b61a4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.0...v1.0.1\"\u003e1.0.1\u003c/a\u003e (2025-09-17)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efail closed when entities disabled (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/c986d2d37a93d45fcc059b09063d9d9c45a655ec\"\u003ec986d2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003evalidate XML comments (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/3d4d2d3a4cd0f68d1211dba549010261fa87b969\"\u003e3d4d2d3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd SECURITY.md (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/64130233c8fea272a5f82f2f585e1593523ec1b1\"\u003e6413023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify behavior for empty lists (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/2025b5cb5e64fc9c4d54b8644187a0a193bdd0ed\"\u003e2025b5c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify process_comments docs (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/6b464fce284a93dbb292f3d063c9f310a478a014\"\u003e6b464fc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify strip whitespace comment behavior (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/b3e22032d21cc387d6cecf3930116e8fdc3151cf\"\u003eb3e2203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ecreate AGENTS.md for coding agents (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/0da66ee797ced7479312aecef92c6a25e235007c\"\u003e0da66ee\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace travis with actions badge (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/2576b94c918fbd154489a95dbbb3feda8bd3cbd8\"\u003e2576b94\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate CONTRIBUTING.md (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/db3918057cf125af989a1263d52df8df5ef8c642\"\u003edb39180\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v0.15.1...v1.0.0\"\u003e1.0.0\u003c/a\u003e (2025-09-12)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING 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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/8d7f1fdb2251b5dc3b98df447850cb8229defc32\"\u003e\u003ccode\u003e8d7f1fd\u003c/code\u003e\u003c/a\u003e chore(master): release 1.0.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/ed704344226ed6451f6735811c695fb5004df44d\"\u003e\u003ccode\u003eed70434\u003c/code\u003e\u003c/a\u003e fix(unparse): add bytes_errors policy and handle bytes scalars consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/89c4bf77b856da1e446fb6f017bf87c7c7f298bf\"\u003e\u003ccode\u003e89c4bf7\u003c/code\u003e\u003c/a\u003e chore(master): release 1.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/fd6a73bf606c3932bcc82bf559a70867a1dd75cd\"\u003e\u003ccode\u003efd6a73b\u003c/code\u003e\u003c/a\u003e docs(readme): fix Fedora and Arch package links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/aa165113bef2b3a1a822209863343b9dc9ffe43a\"\u003e\u003ccode\u003eaa16511\u003c/code\u003e\u003c/a\u003e fix(unparse): serialize None text/attrs as empty values (fixes \u003ca href=\"https://redirect.github.com/martinblech/xmltodict/issues/401\"\u003e#401\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/f7d76c96fc0141238947abcc5fa925d3ffd9eb78\"\u003e\u003ccode\u003ef7d76c9\u003c/code\u003e\u003c/a\u003e style: lines required between function definitions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/1bfb267cd00ba699539d3653b8e0cd3707b2a164\"\u003e\u003ccode\u003e1bfb267\u003c/code\u003e\u003c/a\u003e build: remove unnecessary \u003ccode\u003ewheel\u003c/code\u003e from dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/d9f6d409008ad1115de73a9d5221bf16a2d647db\"\u003e\u003ccode\u003ed9f6d40\u003c/code\u003e\u003c/a\u003e build: no need for README.md in MANIFEST.in\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/34378ef595b1dd553918a19e0f1540dcc5f94b22\"\u003e\u003ccode\u003e34378ef\u003c/code\u003e\u003c/a\u003e build: pep 639 compliance\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/d079849136b031c471ec96a168ad7859ed5994ff\"\u003e\u003ccode\u003ed079849\u003c/code\u003e\u003c/a\u003e chore(master): release 1.0.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/martinblech/xmltodict/compare/v0.11.0...v1.0.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyinstaller` from 6.14.2 to 6.19.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyinstaller/pyinstaller/releases\"\u003epyinstaller's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.19.0\u003c/h2\u003e\n\u003cp\u003ePlease see the \u003ca href=\"https://pyinstaller.org/en/v6.19.0/CHANGES.html#id1\"\u003ev6.19.0 section of the changelog\u003c/a\u003e for a list of the changes since v6.18.0.\u003c/p\u003e\n\u003ch2\u003ev6.18.0\u003c/h2\u003e\n\u003cp\u003ePlease see the \u003ca href=\"https://pyinstaller.org/en/v6.18.0/CHANGES.html#id1\"\u003ev6.18.0 section of the changelog\u003c/a\u003e for a list of the changes since v6.17.0.\u003c/p\u003e\n\u003ch2\u003ev6.17.0\u003c/h2\u003e\n\u003cp\u003ePlease see the \u003ca href=\"https://pyinstaller.org/en/v6.17.0/CHANGES.html#id1\"\u003ev6.17.0 section of the changelog\u003c/a\u003e for a list of the changes since v6.16.0.\u003c/p\u003e\n\u003ch2\u003ev6.16.0\u003c/h2\u003e\n\u003cp\u003ePlease see the \u003ca href=\"https://pyinstaller.org/en/v6.16.0/CHANGES.html#id1\"\u003ev6.16.0 section of the changelog\u003c/a\u003e for a list of the changes since v6.15.0.\u003c/p\u003e\n\u003ch2\u003ev6.15.0\u003c/h2\u003e\n\u003cp\u003ePlease see the \u003ca href=\"https://pyinstaller.org/en/v6.15.0/CHANGES.html#id1\"\u003ev6.15.0 section of the changelog\u003c/a\u003e for a list of the changes since v6.14.2.\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/pyinstaller/pyinstaller/blob/develop/doc/CHANGES.rst\"\u003epyinstaller's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.19.0 (2026-02-14)\u003c/h2\u003e\n\u003cp\u003eBugfix\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* (Windows) Fix collection of ``numpy`` DLLs when ``numpy`` PyPI wheel is\n  installed using ``uv`` instead of ``pip``. (:issue:`9360`)\n* Extend suppression of missing ``api-ms-win-*.dll`` warnings to Windows Server\n  (formerly Windows 10 and 11). (:issue:`9355`)\n* (Conda) Fix error during initialization of the `conda` hook utility module in\n  Anaconda environments where the metadata for packages with no dependencies\n  omit their *dependencies* key. (:issue:`9345`)\n\u003cp\u003eHooks\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* (Windows) Fix installer check in ``numpy`` hook to enable explicit collection\n  of DLLs from ``numpy.libs`` directory when ``numpy`` PyPI wheels are installed\n  through an installer other than ``pip`` - for example, ``uv``. (:issue:`9365`)\n* (Windows) Update the ``pandas`` hook to explicitly collect the DLLs\n  from ``pandas.libs`` directory that has been used in Windows PyPI wheels\n  since ``pandas`` 2.1.0. (:issue:`9365`)\n\n\n6.18.0 (2026-01-13)\n-------------------\n\nFeatures\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;Implement support for Tcl/Tk 9 in splash screen. (:issue:\u0026lt;code\u0026gt;9313\u0026lt;/code\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;p\u0026gt;Bugfix\u0026lt;/p\u0026gt;\n\u0026lt;pre\u0026gt;\u0026lt;code\u0026gt;\n* (macOS) Improve the .framework bundle fix-up code to remove file entries\n  that would be placed under restored symlinked directories. This fixes\n  file-already-exists errors at build time (onedir) or run-time (onefile)\n  when user or a hook tries to collect (all) files from a package that\n  ships a .framework bundle with symlinks mangled into hard-copies\n  (for example, due to lack of symlink support in PyPI wheels). (:issue:`9335`)\n* Have hook for stdlib ``platform`` module exclude the ``_ios_support``\n  module when ``sys.platform != 'ios'``. This prevents unnecessary\n  collection of ``ctypes``-imported ``libobjc`` shared library if the\n  latter happens to be available on the build system. (:issue:`9333`)\n\n\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/9ae6e2afa4e55c3a784ec88ac74a71688a2a37c8\u0026quot;\u0026gt;\u0026lt;code\u0026gt;9ae6e2a\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Release v6.19.0. [skip ci]\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/50eebf41d1b9309000b4ca6a74c0cc3c3f9b6a73\u0026quot;\u0026gt;\u0026lt;code\u0026gt;50eebf4\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; ci: cygwin: add the work-around for broken setuptools upgrade\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/a09778bb289fc24fb34dc675a9e71d3f09794a0a\u0026quot;\u0026gt;\u0026lt;code\u0026gt;a09778b\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; ci: extend the work-around for broken setuptools upgrade\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/a7f87e58c2023ff699610b6af47f4fe4b3a12313\u0026quot;\u0026gt;\u0026lt;code\u0026gt;a7f87e5\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; tests: port remaining metadata tests to importlib.metadata\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/2e751ba399ccf10f0aeb843cbb2f183c22509a6b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2e751ba\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; tests: add missing importorskip('pkg_resources') decorators\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/611f658dae8881eab3f2264bb90aac136a2152aa\u0026quot;\u0026gt;\u0026lt;code\u0026gt;611f658\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; tests: update setuptools to 82.0.0\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/38ae78854b07bd33359929c6d1a9df52c4544085\u0026quot;\u0026gt;\u0026lt;code\u0026gt;38ae788\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Tests: Requirements: Scheduled weekly dependency update for week 06 (\u0026lt;a href=\u0026quot;https://redirect.github.com/pyinstaller/pyinstaller/issues/9369\u0026quot;\u0026gt;#9369\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/e937d76ea5e2177f295488bcaaa6d641adc328cf\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e937d76\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Tests: Requirements: Scheduled weekly dependency update for week 05 (\u0026lt;a href=\u0026quot;https://redirect.github.com/pyinstaller/pyinstaller/issues/9366\u0026quot;\u0026gt;#9366\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/ce6d02ce7ac3d19a6b5a4ef57775d589bc125b4d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;ce6d02c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; hooks: pandas: use delvewheel hook utility function to collect DLLs\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/f0ee7305a607969fee6c02b76e387669df0e0ad7\u0026quot;\u0026gt;\u0026lt;code\u0026gt;f0ee730\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; hooks: numpy: relax installer-type check for delvewheel codepath\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/compare/v6.14.2...v6.19.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `pymupdf` from 1.26.3 to 1.26.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.26.5 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on pypi.org and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e[Linux-aarch64 wheels will be built and uploaded later.]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.26.5\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.26.10.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/2883\"\u003e#2883\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4507\"\u003e#4507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4613\"\u003e#4613\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4700\"\u003e#4700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4716\"\u003e#4716\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupported Python versions are now 3.9-3.14.\u003c/li\u003e\n\u003cli\u003eWe now define all class methods explicitly instead of with dynamic assignment; this improves type hints.\u003c/li\u003e\n\u003cli\u003eRemoved \u003ccode\u003epymupdf.utils.Shape\u003c/code\u003e class, was duplicate of \u003ccode\u003epymupdf.Shape\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAllow use of cibuildwheel to build and test on Pyodide.\u003c/li\u003e\n\u003cli\u003eFixed various Pyodide bugs.\u003c/li\u003e\n\u003cli\u003eIn documentation, added section about Linux wheels and glibc compatibility.\u003c/li\u003e\n\u003cli\u003eImproved documentation of pymupdf.open()'s \u003c!-- raw HTML omitted --\u003e arg.\u003c/li\u003e\n\u003cli\u003eRetrospectively mark \u003ccode\u003e4544 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4544\u0026gt;\u003c/code\u003e_ as fixed in 1.26.4.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.26.4 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on pypi.org and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e[Linux-aarch64 wheels will be built and uploaded later.]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.26.4\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.26.7.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/3806\"\u003e#3806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4388\"\u003e#4388\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4457\"\u003e#4457\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e**Changes in version **\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cc13f8081799c42674a15ef7af6ed90d43b95e89\"\u003e\u003ccode\u003ecc13f80\u003c/code\u003e\u003c/a\u003e pipcl.py: Added asserts to avoid obscure build/runtime errors.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd79b59f0308aa4ff857f39a030fa1dc1e78f5ce\"\u003e\u003ccode\u003ecd79b59\u003c/code\u003e\u003c/a\u003e scripts/test.py: improved cibw command.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/97ed979b651205852dd6d417860851070eeabbd3\"\u003e\u003ccode\u003e97ed979\u003c/code\u003e\u003c/a\u003e scripts/test.py: avoid test failures from cibw's recent default to include fr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7075241b1b6170a7a67aaa4660070889796ae85\"\u003e\u003ccode\u003ea707524\u003c/code\u003e\u003c/a\u003e tests/test_release.py: avoid error from os.path.relpath() on windows.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/aef5d64601af2d79776a29f6b136467e969399ea\"\u003e\u003ccode\u003eaef5d64\u003c/code\u003e\u003c/a\u003e scripts/test.py: fixed bug in manylinux cibuildwheel builds.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c4a83eaf0bcde1fc3ff1310271868d1a1da75918\"\u003e\u003ccode\u003ec4a83ea\u003c/code\u003e\u003c/a\u003e tests/: added test_4699() for upstream bug fixed with mupdf master.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/090e23e315a03b32fd719faff629eea41d373f94\"\u003e\u003ccode\u003e090e23e\u003c/code\u003e\u003c/a\u003e changes.txt: add date of most recent release 1.26.4.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/90e86e7285239360b017ff45e264724da19ca803\"\u003e\u003ccode\u003e90e86e7\u003c/code\u003e\u003c/a\u003e Add 3.14 to list of supported Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/13d89c094ebf01a044f9734313128ad060b1a13b\"\u003e\u003ccode\u003e13d89c0\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py: fix call of pdf_is_ocg_hidden() with mupdf master.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d9d4ab8998dbf692f1de27beec6d10598b9f9eb4\"\u003e\u003ccode\u003ed9d4ab8\u003c/code\u003e\u003c/a\u003e changes.txt: updated to match all changes since 1.26.4 release.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.3...1.26.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown` from 3.8.2 to 3.9\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.9.0\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFootnotes are now ordered by the occurrence of their references in the\ndocument. A new configuration option for the footnotes extension,\n\u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e, has been added to support restoring the previous\nbehavior of ordering footnotes by the occurrence of definitions (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1367\"\u003e#1367\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure inline processing iterates through elements in document order (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1546\"\u003e#1546\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix handling of incomplete HTML tags in code spans in Python 3.14 (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1547\"\u003e#1547\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\u003cp\u003etitle: Changelog\ntoc_depth: 2\u003c/p\u003e\n\u003ch1\u003ePython-Markdown Changelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.1.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to the\n\u003ca href=\"https://packaging.python.org/en/latest/specifications/version-specifiers/\"\u003ePython Version Specification\u003c/a\u003e.\nSee the \u003ca href=\"https://github.com/Python-Markdown/markdown/blob/master/docs/contributing.md\"\u003eContributing Guide\u003c/a\u003e for details.\u003c/p\u003e\n\u003ch2\u003e[3.10.2] - 2026-02-09\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix a regression related to comment handling (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1590\"\u003e#1590\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMore reliable fix for \u003ccode\u003e\u0026lt;/\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1593\"\u003e#1593\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[3.10.1] - 2026-01-21\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure nested elements inside inline comments are properly unescaped (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1571\"\u003e#1571\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMake the docs build successfully with mkdocstrings-python 2.0 (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1575\"\u003e#1575\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix infinite loop when multiple bogus or unclosed HTML comments appear in input (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1578\"\u003e#1578\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix another infinite loop when handling bad comments (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1586\"\u003e#1586\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[3.10.0] - 2025-11-03\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOfficially support Python 3.14 and PyPy 3.11 and drop support for Python 3.9\nand PyPy 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix an HTML comment parsing case in some Python versions that can cause an\ninfinite loop (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1554\"\u003e#1554\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRevert the default behavior of \u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e (to \u003ccode\u003eTrue\u003c/code\u003e). The new\nbehavior introduced in 3.9.0 is experimental and results are inconsistent.\nIt should not have been made the default behavior (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1561\"\u003e#1561\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[3.9.0] - 2025-09-04\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFootnotes are now ordered by the occurrence of their references in the\ndocument. A new configuration option for the footnotes extension,\n\u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e, has been added to support restoring the previous\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/f39cf84a24124526c1a0efbe52219fa9950774f6\"\u003e\u003ccode\u003ef39cf84\u003c/code\u003e\u003c/a\u003e Bump version to 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/07bf2076623be5de9952e1f35bfb8c218b699300\"\u003e\u003ccode\u003e07bf207\u003c/code\u003e\u003c/a\u003e Order footnotes by reference\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/23c301de28e12426408656efdfa153b11d4ff558\"\u003e\u003ccode\u003e23c301d\u003c/code\u003e\u003c/a\u003e Fix failing cases for Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/4669a09894d4a35cd5f5d2106b0da95e48d1a3f9\"\u003e\u003ccode\u003e4669a09\u003c/code\u003e\u003c/a\u003e fix typo\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Python-Markdown/markdown/compare/3.8.2...3.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `setuptools` to 82.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/setuptools/blob/main/NEWS.rst\"\u003esetuptools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev82.0.1\u003c/h1\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the loading of \u003ccode\u003elauncher manifest.xml\u003c/code\u003e file. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5047\"\u003e#5047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplaced deprecated \u003ccode\u003ejson.__version__\u003c/code\u003e with fixture in tests. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5186\"\u003e#5186\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved Documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd advice about how to improve predictability when installing sdists. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5168\"\u003e#5168\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMisc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/4941\"\u003e#4941\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5157\"\u003e#5157\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5169\"\u003e#5169\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5175\"\u003e#5175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev82.0.0\u003c/h1\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epkg_resources\u003c/code\u003e has been removed from Setuptools. Most common uses of \u003ccode\u003epkg_resources\u003c/code\u003e have been superseded by the \u003ccode\u003eimportlib.resources \u0026lt;https://docs.python.org/3/library/importlib.resources.html\u0026gt;\u003c/code\u003e_ and \u003ccode\u003eimportlib.metadata \u0026lt;https://docs.python.org/3/library/importlib.metadata.html\u0026gt;\u003c/code\u003e_ projects. Projects and environments relying on \u003ccode\u003epkg_resources\u003c/code\u003e for namespace packages or other behavior should depend on older versions of \u003ccode\u003esetuptools\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/3085\"\u003e#3085\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev81.0.0\u003c/h1\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved support for the --dry-run parameter to setup.py. This one feature by its nature threads through lots of core and ancillary functionality, adding complexity and friction. Removal of this parameter will help decouple the compiler functionality from distutils and thus the eventual full integration of distutils. These changes do affect some class and function signatures, so any derivative functionality may require some compatibility shims to support their expected interface. Please report any issues to the Setuptools project for investigation. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/4872\"\u003e#4872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev80.10.2\u003c/h1\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate vendored dependencies. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5159\"\u003e#5159\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMisc\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/5a13876673a41e3cd21d4d6e587f53d0fb4fd8e5\"\u003e\u003ccode\u003e5a13876\u003c/code\u003e\u003c/a\u003e Bump version: 82.0.0 → 82.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/51ab8f183f1c4112675d8d6ec6b004406d518ee8\"\u003e\u003ccode\u003e51ab8f1\u003c/code\u003e\u003c/a\u003e Avoid using (deprecated) 'json.\u003cstrong\u003eversion\u003c/strong\u003e' in tests (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5194\"\u003e#5194\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/f9c37b20bb0ed11203f676f9683452a4c3ace6f6\"\u003e\u003ccode\u003ef9c37b2\u003c/code\u003e\u003c/a\u003e Docs/CI: Fix intersphinx references (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5195\"\u003e#5195\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/8173db2a4fc0f6cb28926b3dba59116b79f435c8\"\u003e\u003ccode\u003e8173db2\u003c/code\u003e\u003c/a\u003e Docs: Fix intersphinx references\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/09bafbc74923f2a3591b5b098be75d6af6ca5141\"\u003e\u003ccode\u003e09bafbc\u003c/code\u003e\u003c/a\u003e Fix past tense on newsfragment\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/461ea56c8e629819a23920f44d9298d4f041abde\"\u003e\u003ccode\u003e461ea56\u003c/code\u003e\u003c/a\u003e Add news fragment\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/c4ffe535b58235ff9f9ebe90d24a2cffb57e70ae\"\u003e\u003ccode\u003ec4ffe53\u003c/code\u003e\u003c/a\u003e Avoid using (deprecated) 'json.\u003cstrong\u003eversion\u003c/strong\u003e' in tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/749258b1a96c7accc05ea7d842fb19fc378866fe\"\u003e\u003ccode\u003e749258b\u003c/code\u003e\u003c/a\u003e Cleanup \u003ccode\u003epkg_resources\u003c/code\u003e dependencies and configuration (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5175\"\u003e#5175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/2019c16701667db1010c62ec11c6ef78c2e58206\"\u003e\u003ccode\u003e2019c16\u003c/code\u003e\u003c/a\u003e Parse \u003ccode\u003eext-module.define-macros\u003c/code\u003e from \u003ccode\u003epyproject.toml\u003c/code\u003e as list of tuples (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5169\"\u003e#5169\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/b809c86a37d97fcce290d5f51d4c293ab40bc685\"\u003e\u003ccode\u003eb809c86\u003c/code\u003e\u003c/a\u003e Sync setuptools schema with validate-pyproject (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5157\"\u003e#5157\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/setuptools/compare/v61.0.0...v82.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/codevenkat/Lector/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/codevenkat%2FLector/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"},{"uuid":"4250425051","node_id":"PR_kwDOQ7pH287R1Xav","number":18,"state":"open","title":"deps: update pymupdf requirement from \u003e=1.26.7 to \u003e=1.27.2.2","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-13T00:16:47.000Z","updated_at":"2026-04-13T00:17:26.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps: update","packages":[{"name":"pymupdf","old_version":"\u003e=1.26.7","new_version":"\u003e=1.27.2.2","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e**Changes in version **\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/75c04018d2a16d39d51876253dca79e94582ce3b\"\u003e\u003ccode\u003e75c0401\u003c/code\u003e\u003c/a\u003e .github/ISSUE_TEMPLATE/bug_report.yml: add next version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/b256056c149bcc98b17baa389d24bd25a70c8967\"\u003e\u003ccode\u003eb256056\u003c/code\u003e\u003c/a\u003e changes.txt: updated for release of version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/f8adc34658e0736d1d71712048e2868eae704de5\"\u003e\u003ccode\u003ef8adc34\u003c/code\u003e\u003c/a\u003e setup.py: incremented version to 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c3d4e89d08d7ef3e034c3fd4dae3d7f421cb1cd1\"\u003e\u003ccode\u003ec3d4e89\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): update to match fixed behaviour in pymupd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e21f733988dacffb7664e61450a4ae3bcb3c41ba\"\u003e\u003ccode\u003ee21f733\u003c/code\u003e\u003c/a\u003e docs/ src/\u003cstrong\u003einit\u003c/strong\u003e.py: improve docs for insert_textbox() methods.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/2f362bd04158e51b681761051f5bbe1163fce042\"\u003e\u003ccode\u003e2f362bd\u003c/code\u003e\u003c/a\u003e Issue 4902: Fix linewidth of stroked text.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/409eede36626461894099a6c0686b28680baf747\"\u003e\u003ccode\u003e409eede\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): new, reproducer for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/ca1a0ac076805c6d033973127ea8dfe2f99c8eed\"\u003e\u003ccode\u003eca1a0ac\u003c/code\u003e\u003c/a\u003e Fix reference to Embedding Appendix in tutorial documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/77e4f3590e3b9e9d0725b5639f99aa11d7596723\"\u003e\u003ccode\u003e77e4f35\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py tests/: Partial fix for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e - exception in Document.scrub().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cb4ce4ceff2c22779c6ced48d5071cd208d8124e\"\u003e\u003ccode\u003ecb4ce4c\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py: add Annot.\u003cstrong\u003ebool\u003c/strong\u003e().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.7...1.27.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/WSzP/cv-warlock/pull/18","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/WSzP%2Fcv-warlock/issues/18","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/18/packages"},{"uuid":"4247364375","node_id":"PR_kwDOSAccuM7RwH-V","number":6,"state":"closed","title":"build(deps-dev): bump pymupdf from 1.26.5 to 1.27.2.2","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-04-26T10:23:16.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-12T09:10:43.000Z","updated_at":"2026-04-26T10:23:17.000Z","time_to_close":1213953,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps-dev)","packages":[{"name":"pymupdf","old_version":"1.26.5","new_version":"1.27.2.2","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.26.5 to 1.27.2.2.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4903\"\u003e#4903\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.1  released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- 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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e**Changes in version **\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/75c04018d2a16d39d51876253dca79e94582ce3b\"\u003e\u003ccode\u003e75c0401\u003c/code\u003e\u003c/a\u003e .github/ISSUE_TEMPLATE/bug_report.yml: add next version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/b256056c149bcc98b17baa389d24bd25a70c8967\"\u003e\u003ccode\u003eb256056\u003c/code\u003e\u003c/a\u003e changes.txt: updated for release of version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/f8adc34658e0736d1d71712048e2868eae704de5\"\u003e\u003ccode\u003ef8adc34\u003c/code\u003e\u003c/a\u003e setup.py: incremented version to 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c3d4e89d08d7ef3e034c3fd4dae3d7f421cb1cd1\"\u003e\u003ccode\u003ec3d4e89\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): update to match fixed behaviour in pymupd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e21f733988dacffb7664e61450a4ae3bcb3c41ba\"\u003e\u003ccode\u003ee21f733\u003c/code\u003e\u003c/a\u003e docs/ src/\u003cstrong\u003einit\u003c/strong\u003e.py: improve docs for insert_textbox() methods.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/2f362bd04158e51b681761051f5bbe1163fce042\"\u003e\u003ccode\u003e2f362bd\u003c/code\u003e\u003c/a\u003e Issue 4902: Fix linewidth of stroked text.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/409eede36626461894099a6c0686b28680baf747\"\u003e\u003ccode\u003e409eede\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): new, reproducer for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/ca1a0ac076805c6d033973127ea8dfe2f99c8eed\"\u003e\u003ccode\u003eca1a0ac\u003c/code\u003e\u003c/a\u003e Fix reference to Embedding Appendix in tutorial documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/77e4f3590e3b9e9d0725b5639f99aa11d7596723\"\u003e\u003ccode\u003e77e4f35\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py tests/: Partial fix for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e - exception in Document.scrub().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cb4ce4ceff2c22779c6ced48d5071cd208d8124e\"\u003e\u003ccode\u003ecb4ce4c\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py: add Annot.\u003cstrong\u003ebool\u003c/strong\u003e().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.5...1.27.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pymupdf\u0026package-manager=pip\u0026previous-version=1.26.5\u0026new-version=1.27.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/Dikshajaju/CV/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dikshajaju%2FCV/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"},{"uuid":"4117694089","node_id":"PR_kwDOPJuLvc7MjED5","number":100,"state":"open","title":"chore(deps): bump pymupdf from 1.26.7 to 1.27.2.2","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-03-23T01:52:04.000Z","updated_at":"2026-03-23T01:52:10.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"pymupdf","old_version":"1.26.7","new_version":"1.27.2.2","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.26.7 to 1.27.2.2.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4903\"\u003e#4903\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.1  released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- 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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: `\u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of *_forward_decl\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4751 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4751\u0026gt;\u003c/code\u003e_: Memory leaking in page.widgets()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4762 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4762\u0026gt;\u003c/code\u003e_: Importing pymupdf make pillow segmentation fault for converting jp2 file on ArchLinux\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4790 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4790\u0026gt;\u003c/code\u003e_: Problem to delete pages on PDF\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4857 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4857\u0026gt;\u003c/code\u003e_: Package is missing py.typed file required for type checking\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4886 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4886\u0026gt;\u003c/code\u003e_: \u003c!-- raw HTML omitted --\u003e width attribute behaviour seems wrong\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4907 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4907\u0026gt;\u003c/code\u003e_: signal 11:SIGSEGV while using display_list.get_textpage()\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\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/pymupdf/PyMuPDF/commit/75c04018d2a16d39d51876253dca79e94582ce3b\"\u003e\u003ccode\u003e75c0401\u003c/code\u003e\u003c/a\u003e .github/ISSUE_TEMPLATE/bug_report.yml: add next version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/b256056c149bcc98b17baa389d24bd25a70c8967\"\u003e\u003ccode\u003eb256056\u003c/code\u003e\u003c/a\u003e changes.txt: updated for release of version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/f8adc34658e0736d1d71712048e2868eae704de5\"\u003e\u003ccode\u003ef8adc34\u003c/code\u003e\u003c/a\u003e setup.py: incremented version to 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c3d4e89d08d7ef3e034c3fd4dae3d7f421cb1cd1\"\u003e\u003ccode\u003ec3d4e89\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): update to match fixed behaviour in pymupd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e21f733988dacffb7664e61450a4ae3bcb3c41ba\"\u003e\u003ccode\u003ee21f733\u003c/code\u003e\u003c/a\u003e docs/ src/\u003cstrong\u003einit\u003c/strong\u003e.py: improve docs for insert_textbox() methods.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/2f362bd04158e51b681761051f5bbe1163fce042\"\u003e\u003ccode\u003e2f362bd\u003c/code\u003e\u003c/a\u003e Issue 4902: Fix linewidth of stroked text.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/409eede36626461894099a6c0686b28680baf747\"\u003e\u003ccode\u003e409eede\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): new, reproducer for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/ca1a0ac076805c6d033973127ea8dfe2f99c8eed\"\u003e\u003ccode\u003eca1a0ac\u003c/code\u003e\u003c/a\u003e Fix reference to Embedding Appendix in tutorial documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/77e4f3590e3b9e9d0725b5639f99aa11d7596723\"\u003e\u003ccode\u003e77e4f35\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py tests/: Partial fix for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e - exception in Document.scrub().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cb4ce4ceff2c22779c6ced48d5071cd208d8124e\"\u003e\u003ccode\u003ecb4ce4c\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py: add Annot.\u003cstrong\u003ebool\u003c/strong\u003e().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.7...1.27.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pymupdf\u0026package-manager=pip\u0026previous-version=1.26.7\u0026new-version=1.27.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/nextybase/timmy-kb-acme/pull/100","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/nextybase%2Ftimmy-kb-acme/issues/100","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/100/packages"},{"uuid":"4111295204","node_id":"PR_kwDOP62mM87MUD9a","number":36,"state":"open","title":"deps(python)(deps): bump pymupdf from 1.26.5 to 1.27.2.2","user":"dependabot[bot]","labels":["dependencies","python","agent:fix"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-03-21T03:58:07.000Z","updated_at":"2026-03-21T03:58:32.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(python)(deps)","packages":[{"name":"pymupdf","old_version":"1.26.5","new_version":"1.27.2.2","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.26.5 to 1.27.2.2.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4903\"\u003e#4903\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.1  released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- 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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: `\u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of *_forward_decl\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4751 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4751\u0026gt;\u003c/code\u003e_: Memory leaking in page.widgets()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4762 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4762\u0026gt;\u003c/code\u003e_: Importing pymupdf make pillow segmentation fault for converting jp2 file on ArchLinux\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4790 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4790\u0026gt;\u003c/code\u003e_: Problem to delete pages on PDF\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4857 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4857\u0026gt;\u003c/code\u003e_: Package is missing py.typed file required for type checking\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4886 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4886\u0026gt;\u003c/code\u003e_: \u003c!-- raw HTML omitted --\u003e width attribute behaviour seems wrong\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4907 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4907\u0026gt;\u003c/code\u003e_: signal 11:SIGSEGV while using display_list.get_textpage()\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\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/pymupdf/PyMuPDF/commit/75c04018d2a16d39d51876253dca79e94582ce3b\"\u003e\u003ccode\u003e75c0401\u003c/code\u003e\u003c/a\u003e .github/ISSUE_TEMPLATE/bug_report.yml: add next version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/b256056c149bcc98b17baa389d24bd25a70c8967\"\u003e\u003ccode\u003eb256056\u003c/code\u003e\u003c/a\u003e changes.txt: updated for release of version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/f8adc34658e0736d1d71712048e2868eae704de5\"\u003e\u003ccode\u003ef8adc34\u003c/code\u003e\u003c/a\u003e setup.py: incremented version to 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c3d4e89d08d7ef3e034c3fd4dae3d7f421cb1cd1\"\u003e\u003ccode\u003ec3d4e89\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): update to match fixed behaviour in pymupd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e21f733988dacffb7664e61450a4ae3bcb3c41ba\"\u003e\u003ccode\u003ee21f733\u003c/code\u003e\u003c/a\u003e docs/ src/\u003cstrong\u003einit\u003c/strong\u003e.py: improve docs for insert_textbox() methods.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/2f362bd04158e51b681761051f5bbe1163fce042\"\u003e\u003ccode\u003e2f362bd\u003c/code\u003e\u003c/a\u003e Issue 4902: Fix linewidth of stroked text.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/409eede36626461894099a6c0686b28680baf747\"\u003e\u003ccode\u003e409eede\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): new, reproducer for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/ca1a0ac076805c6d033973127ea8dfe2f99c8eed\"\u003e\u003ccode\u003eca1a0ac\u003c/code\u003e\u003c/a\u003e Fix reference to Embedding Appendix in tutorial documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/77e4f3590e3b9e9d0725b5639f99aa11d7596723\"\u003e\u003ccode\u003e77e4f35\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py tests/: Partial fix for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e - exception in Document.scrub().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cb4ce4ceff2c22779c6ced48d5071cd208d8124e\"\u003e\u003ccode\u003ecb4ce4c\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py: add Annot.\u003cstrong\u003ebool\u003c/strong\u003e().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.5...1.27.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pymupdf\u0026package-manager=pip\u0026previous-version=1.26.5\u0026new-version=1.27.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/caraxesthebloodwyrm02/echoes/pull/36","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/caraxesthebloodwyrm02%2Fechoes/issues/36","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/36/packages"},{"uuid":"4081297930","node_id":"PR_kwDOPvOdvs7K3Gzb","number":199,"state":"closed","title":"chore(deps): bump the python-dependencies group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-03-18T06:22:45.000Z","author_association":null,"state_reason":null,"created_at":"2026-03-16T09:31:30.000Z","updated_at":"2026-03-18T06:22:47.000Z","time_to_close":161475,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-dependencies","update_count":20,"packages":[{"name":"pyrotgfork","old_version":"2.2.19","new_version":"2.2.21","repository_url":"https://github.com/TelegramPlayGround/Pyrogram"},{"name":"scrapling","old_version":"0.4.1","new_version":"0.4.2","repository_url":"https://github.com/D4Vinci/Scrapling"},{"name":"json-repair","old_version":"0.58.1","new_version":"0.58.5","repository_url":"https://github.com/mangiucugna/json_repair"},{"name":"redis","old_version":"7.2.1","new_version":"7.3.0","repository_url":"https://github.com/redis/redis-py"},{"name":"pymupdf","old_version":"1.27.1","new_version":"1.27.2","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"uvicorn","old_version":"0.41.0","new_version":"0.42.0"},{"name":"pyjwt","old_version":"2.11.0","new_version":"2.12.1","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"ruff","old_version":"0.15.4","new_version":"0.15.6","repository_url":"https://github.com/astral-sh/ruff"},{"name":"cachetools","old_version":"7.0.3","new_version":"7.0.5","repository_url":"https://github.com/tkem/cachetools"},{"name":"charset-normalizer","old_version":"3.4.4","new_version":"3.4.6","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"crawlee","old_version":"1.4.0","new_version":"1.5.0","repository_url":"https://github.com/apify/crawlee-python"},{"name":"filelock","old_version":"3.25.0","new_version":"3.25.2","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"impit","old_version":"0.11.0","new_version":"0.12.0","repository_url":"https://github.com/apify/impit"},{"name":"numpy","old_version":"2.4.2","new_version":"2.4.3","repository_url":"https://github.com/numpy/numpy"},{"name":"pydantic-core","old_version":"2.41.5","new_version":"2.42.0","repository_url":"https://github.com/pydantic/pydantic-core"},{"name":"setuptools","old_version":"82.0.0","new_version":"82.0.1","repository_url":"https://github.com/pypa/setuptools"},{"name":"tld","old_version":"0.13.1","new_version":"0.13.2","repository_url":"https://github.com/barseghyanartur/tld"},{"name":"wrapt","old_version":"2.1.1","new_version":"2.1.2","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"identify","old_version":"2.6.17","new_version":"2.6.18","repository_url":"https://github.com/pre-commit/identify"},{"name":"platformdirs","old_version":"4.9.2","new_version":"4.9.4","repository_url":"https://github.com/tox-dev/platformdirs"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dependencies group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pyrotgfork](https://github.com/TelegramPlayGround/Pyrogram) | `2.2.19` | `2.2.21` |\n| [scrapling](https://github.com/D4Vinci/Scrapling) | `0.4.1` | `0.4.2` |\n| [json-repair](https://github.com/mangiucugna/json_repair) | `0.58.1` | `0.58.5` |\n| [redis](https://github.com/redis/redis-py) | `7.2.1` | `7.3.0` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.27.1` | `1.27.2` |\n| [uvicorn[standard]](https://github.com/Kludex/uvicorn) | `0.41.0` | `0.42.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.11.0` | `2.12.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.4` | `0.15.6` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.0.3` | `7.0.5` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.4` | `3.4.6` |\n| [crawlee](https://github.com/apify/crawlee-python) | `1.4.0` | `1.5.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.25.0` | `3.25.2` |\n| [impit](https://github.com/apify/impit) | `0.11.0` | `0.12.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.2` | `2.4.3` |\n| [pydantic-core](https://github.com/pydantic/pydantic-core) | `2.41.5` | `2.42.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.0` | `82.0.1` |\n| [tld](https://github.com/barseghyanartur/tld) | `0.13.1` | `0.13.2` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `2.1.1` | `2.1.2` |\n| [identify](https://github.com/pre-commit/identify) | `2.6.17` | `2.6.18` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.2` | `4.9.4` |\n\n\nUpdates `pyrotgfork` from 2.2.19 to 2.2.21\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/6faa5faa47b8843557698b1fa26a504f8db48c64\"\u003e\u003ccode\u003e6faa5fa\u003c/code\u003e\u003c/a\u003e Update Pyrogram to v2.2.21\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/91fd584f942b628cc575d3a16582919d7ba323a1\"\u003e\u003ccode\u003e91fd584\u003c/code\u003e\u003c/a\u003e fix: edge case in sending date_time_format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/cf41eb2b624b24fc5b517efa2501fca80f4fe9e4\"\u003e\u003ccode\u003ecf41eb2\u003c/code\u003e\u003c/a\u003e Change administrator title parameter to 'tag'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/18f2d25ed8bf1352d671c1e6fc0b7cd60cea8bfe\"\u003e\u003ccode\u003e18f2d25\u003c/code\u003e\u003c/a\u003e Update Pyrogram to v2.2.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/79dae45488a82eabd481340d9c680d2684fc684a\"\u003e\u003ccode\u003e79dae45\u003c/code\u003e\u003c/a\u003e Added the MessageEntity type “date_time”, allowing to show a formatted date a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/6bdf57a33e664da14541756148f0ea3dc89067a8\"\u003e\u003ccode\u003e6bdf57a\u003c/code\u003e\u003c/a\u003e Added support for setting email during authorization\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/d1528d0eb0390c714e0c2fb0652834da86397eff\"\u003e\u003ccode\u003ed1528d0\u003c/code\u003e\u003c/a\u003e Added CHAT_OWNER_LEFT, CHAT_OWNER_CHANGED, CHAT_HAS_PROTECTED_CONTENT_TOGGLED...\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/TelegramPlayGround/Pyrogram/compare/v2.2.19...v2.2.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `scrapling` from 0.4.1 to 0.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/D4Vinci/Scrapling/releases\"\u003escrapling's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v0.4.2\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eA new maintenance update with important changes\u003c/strong\u003e\u003c/p\u003e\n\u003ch4\u003eBug fixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eThe function \u003ccode\u003eget_all_text()\u003c/code\u003e now captures tail text nodes. This will make the MCP server and commands see text that was missed before (\u003ca href=\"https://redirect.github.com/D4Vinci/Scrapling/pull/168\"\u003e#168\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/mhillebrand\"\u003e\u003ccode\u003e@​mhillebrand\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReferer now returns a bare Google url instead of a Google search URL. The previous logic was incorrect and may have produced a fingerprinting signal (\u003ca href=\"https://redirect.github.com/D4Vinci/Scrapling/pull/179\"\u003e#179\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/Bortlesboat\"\u003e\u003ccode\u003e@​Bortlesboat\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed an issue with extra flags concatenation in all browsers. Thanks \u003ca href=\"https://github.com/rostchri\"\u003e\u003ccode\u003e@​rostchri\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed a type hints issue with Python versions below 3.12 that caused it to crash. (Solves \u003ca href=\"https://redirect.github.com/D4Vinci/Scrapling/issues/163\"\u003e#163\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdded an Agent Skill for Claude Code / OpenClaw and other AI agentic tools.\u003c/li\u003e\n\u003cli\u003eAdded the Agent Skill to Clawhub.\u003c/li\u003e\n\u003cli\u003eUpdates all browsers and Playwright versions to the latest.\u003c/li\u003e\n\u003cli\u003eAdded a French translation to the main README file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cem\u003e🙏 Special thanks to the community for all the continuous testing and feedback\u003c/em\u003e\u003c/p\u003e\n\u003chr /\u003e\n\u003ch3\u003eBig shoutout to our Platinum Sponsors\u003c/h3\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\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/D4Vinci/Scrapling/commit/19c21c17eee7cac104ca116c77dc40c15219f294\"\u003e\u003ccode\u003e19c21c1\u003c/code\u003e\u003c/a\u003e v0.4.2 (\u003ca href=\"https://redirect.github.com/D4Vinci/Scrapling/issues/183\"\u003e#183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/6ec40ad19da84cef683ac5f45fed446bb0d38e99\"\u003e\u003ccode\u003e6ec40ad\u003c/code\u003e\u003c/a\u003e docs: remove a sponsor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/f80743a97bbd72b49bcd5edca4e4780bb8c2a4b5\"\u003e\u003ccode\u003ef80743a\u003c/code\u003e\u003c/a\u003e style: remove unused import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/66e0e7af576b2de767277161df6eebb51b83f09f\"\u003e\u003ccode\u003e66e0e7a\u003c/code\u003e\u003c/a\u003e fix(agent): update the agent skill zip file with the new version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/73832f9dfe6bfcaab2e3cbf9b1be34118ee97520\"\u003e\u003ccode\u003e73832f9\u003c/code\u003e\u003c/a\u003e docs: update the website to reflect the google referer logic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/d48ac78c791bb8ca0c070054cf64771da2fe9fab\"\u003e\u003ccode\u003ed48ac78\u003c/code\u003e\u003c/a\u003e test: update tests accordingly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/8e3bf89e6cb98aeea6223884404fe25df898513d\"\u003e\u003ccode\u003e8e3bf89\u003c/code\u003e\u003c/a\u003e fix(agent): update the agent skills docs and version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/a929de6ca4f6f84f09b42226ee5670643cffccc8\"\u003e\u003ccode\u003ea929de6\u003c/code\u003e\u003c/a\u003e fix: update code and docstrings to remove the old google referer logic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/b547e04207a9b691bc0dbffcc3da593dc7481070\"\u003e\u003ccode\u003eb547e04\u003c/code\u003e\u003c/a\u003e ops: update playwright pinned version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/27409927a3557de3571b2c280507956b2f53f398\"\u003e\u003ccode\u003e2740992\u003c/code\u003e\u003c/a\u003e build: pump up deps and browsers versions\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/D4Vinci/Scrapling/compare/v0.4.1...v0.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `json-repair` from 0.58.1 to 0.58.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mangiucugna/json_repair/releases\"\u003ejson-repair's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 0.58.5\u003c/h2\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eImproved parser performance, especially for common JSON containing ordinary quoted strings. Profiler indicates a 60% improvement in performance.\u003c/li\u003e\n\u003cli\u003eHardened schema-guided repair behavior, including safer salvage handling for mixed type unions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eThink about sponsoring this library!\u003c/h1\u003e\n\u003cp\u003eThis library is free for everyone and it's maintained and developed as a side project so, if you find this library useful for your work, consider offering me a beer via this link: \u003ca href=\"https://github.com/sponsors/mangiucugna\"\u003ehttps://github.com/sponsors/mangiucugna\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease 0.58.4\u003c/h2\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ev0.58.3 added some regressions in which \u003ccode\u003esalvage\u003c/code\u003e mode could repair \u003cem\u003eless\u003c/em\u003e than \u003ccode\u003estandard\u003c/code\u003e mode. Fixed that regression and some minor changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eThink about sponsoring this library!\u003c/h1\u003e\n\u003cp\u003eThis library is free for everyone and it's maintained and developed as a side project so, if you find this library useful for your work, consider offering me a beer via this link: \u003ca href=\"https://github.com/sponsors/mangiucugna\"\u003ehttps://github.com/sponsors/mangiucugna\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease 0.58.3\u003c/h2\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/mangiucugna/json_repair/issues/181\"\u003e#181\u003c/a\u003e, fix another bug in duplicate-key dedup for array objects\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eThink about sponsoring this library!\u003c/h1\u003e\n\u003cp\u003eThis library is free for everyone and it's maintained and developed as a side project so, if you find this library useful for your work, consider offering me a beer via this link: \u003ca href=\"https://github.com/sponsors/mangiucugna\"\u003ehttps://github.com/sponsors/mangiucugna\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease 0.58.2\u003c/h2\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/mangiucugna/json_repair/issues/181\"\u003e#181\u003c/a\u003e, fix a corner in case in which duplicate keys won't be deduplicated and instead split inside an array.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eThink about sponsoring this library!\u003c/h1\u003e\n\u003cp\u003eThis library is free for everyone and it's maintained and developed as a side project so, if you find this library useful for your work, consider offering me a beer via this link: \u003ca href=\"https://github.com/sponsors/mangiucugna\"\u003ehttps://github.com/sponsors/mangiucugna\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/mangiucugna/json_repair/commit/16e6b1a3f6c7288672f79bc8bb4c815a228cf859\"\u003e\u003ccode\u003e16e6b1a\u003c/code\u003e\u003c/a\u003e Bump patch version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/0a7ad6679249d274afeaba1d414b8541af8c5fb7\"\u003e\u003ccode\u003e0a7ad66\u003c/code\u003e\u003c/a\u003e Improve parser hot-path performance\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/294e425e596377e19ada0444b5b06eed354d5e2d\"\u003e\u003ccode\u003e294e425\u003c/code\u003e\u003c/a\u003e Tighten Ruff coverage and package boundaries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/b2486d793bee88440750e1c2f22c54c1dfb75a68\"\u003e\u003ccode\u003eb2486d7\u003c/code\u003e\u003c/a\u003e Improve schema performance coverage and trim parser overhead\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/a210ec4ec74dbe26a46d2aecf3190076cb55d8b6\"\u003e\u003ccode\u003ea210ec4\u003c/code\u003e\u003c/a\u003e Harden patternProperties matching without regex execution\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/158efed1f8256b34e99d235a1dd48550a9f029cb\"\u003e\u003ccode\u003e158efed\u003c/code\u003e\u003c/a\u003e Bump 0.58.4 and harden schema salvage behavior\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/f6332358657bc57f730d0548058846ba6aed9089\"\u003e\u003ccode\u003ef633235\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mangiucugna/json_repair/issues/182\"\u003e#182\u003c/a\u003e from mangiucugna/codex/ci-packaging-chores\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/e267ca6eba980b054a369fb9274ffad41e4485f7\"\u003e\u003ccode\u003ee267ca6\u003c/code\u003e\u003c/a\u003e chore(ci): simplify uv workflow steps and package checks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/25a0883f7f1051040f25543a93ed764646594d20\"\u003e\u003ccode\u003e25a0883\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/mangiucugna/json_repair/issues/181\"\u003e#181\u003c/a\u003e: align duplicate-key dedup for array objects\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/ce205abc44b8adff483889193fb1b4a56f476a00\"\u003e\u003ccode\u003ece205ab\u003c/code\u003e\u003c/a\u003e ci: fix PythonAnywhere sync workflow_run condition\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mangiucugna/json_repair/compare/v0.58.1...v0.58.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 7.2.1 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/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eOpenTelemetry Native Metrics Support for asynchronous clients\u003c/strong\u003e\nAdded comprehensive OpenTelemetry metrics support for asynchronous clients following the \u003ca href=\"https://opentelemetry.io/docs/specs/semconv/database/database-metrics/\"\u003eOpenTelemetry Database Client Semantic Conventions\u003c/a\u003e.\nMetric groups include:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCommand metrics: Operation duration with retry tracking\u003c/li\u003e\n\u003cli\u003eConnection basic: Connection count and creation time\u003c/li\u003e\n\u003cli\u003eResiliency: Errors, handoffs, timeout relaxation\u003c/li\u003e\n\u003cli\u003eConnection advanced: Wait time and use time\u003c/li\u003e\n\u003cli\u003ePubsub metrics: Published and received messages\u003c/li\u003e\n\u003cli\u003eStream metrics: Processing duration and maintenance notifications\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded OTel instrumentation and metrics export for async client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3977\"\u003e#3977\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[async] Adding access to cluster client's nodes_manager and set_response_callback in ClusterPipeline objects (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3989\"\u003e#3989\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(connection): Ensure we have an initialized protocol in connection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3981\"\u003e#3981\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: use KeysT for blpop and brpop keys parameter type annotation (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3987\"\u003e#3987\u003c/a\u003e \u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3990\"\u003e#3990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3985\"\u003e#3985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: replace 3 bare except clauses with except Exception (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3980\"\u003e#3980\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/turanalmammadov\"\u003e\u003ccode\u003e@​turanalmammadov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/haosenwang1018\"\u003e\u003ccode\u003e@​haosenwang1018\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/Medno\"\u003e\u003ccode\u003e@​Medno\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\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/8ecbc7a728792ab9c71078cb330a64c225cb3351\"\u003e\u003ccode\u003e8ecbc7a\u003c/code\u003e\u003c/a\u003e Updating lib version to 7.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/11043df86ed5f892cde1f34f08f3450f13bb6339\"\u003e\u003ccode\u003e11043df\u003c/code\u003e\u003c/a\u003e typing: accept single-key input for blpop and brpop (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3990\"\u003e#3990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d9581250202123ebf68d299e8f2ea79fa9bd7210\"\u003e\u003ccode\u003ed958125\u003c/code\u003e\u003c/a\u003e fix: use KeysT for blpop and brpop keys parameter type annotation (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3987\"\u003e#3987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/75bf91b8a28bfc3f8417e58d1b78bd112ffcf6de\"\u003e\u003ccode\u003e75bf91b\u003c/code\u003e\u003c/a\u003e [async] Adding access to cluster client's nodes_manager and set_response_call...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/abf5bcb2ded3f393cd3d74803b058df325e3755c\"\u003e\u003ccode\u003eabf5bcb\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3985\"\u003e#3985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/5b0303bf90792cfdfff951f446c71ec7baf83e0e\"\u003e\u003ccode\u003e5b0303b\u003c/code\u003e\u003c/a\u003e fix: replace 3 bare except clauses with except Exception (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3980\"\u003e#3980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/e9fba8689f74e4aea45c8b9d75e517e29c54a76a\"\u003e\u003ccode\u003ee9fba86\u003c/code\u003e\u003c/a\u003e Added OTel instrumentation and metrics export for async client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3977\"\u003e#3977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/7ce513d262288fb2d79a1d59dff0cf5ff0cb13b0\"\u003e\u003ccode\u003e7ce513d\u003c/code\u003e\u003c/a\u003e fix(connection): Ensure we have an initialized protocol in connection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3981\"\u003e#3981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/8e3a5b2f10677c58951fd04f79db1802f79a9bea\"\u003e\u003ccode\u003e8e3a5b2\u003c/code\u003e\u003c/a\u003e remove remaining imports of typing_extensions (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3873\"\u003e#3873\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/5b46430e23748d85140b143cbce02523e284482e\"\u003e\u003ccode\u003e5b46430\u003c/code\u003e\u003c/a\u003e Hold references to ClusterNode disconnect task (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3826\"\u003e#3826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v7.2.1...v7.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.27.1 to 1.27.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4903\"\u003e#4903\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of *_forward_decl\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4751 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4751\u0026gt;\u003c/code\u003e_: Memory leaking in page.widgets()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4762 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4762\u0026gt;\u003c/code\u003e_: Importing pymupdf make pillow segmentation fault for converting jp2 file on ArchLinux\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4790 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4790\u0026gt;\u003c/code\u003e_: Problem to delete pages on PDF\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4857 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4857\u0026gt;\u003c/code\u003e_: Package is missing py.typed file required for type checking\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4886 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4886\u0026gt;\u003c/code\u003e_: \u003c!-- raw HTML omitted --\u003e width attribute behaviour seems wrong\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4907 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4907\u0026gt;\u003c/code\u003e_: signal 11:SIGSEGV while using display_list.get_textpage()\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003epymupdf.TEXT_CLIP\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRemoved support for mupdf \u0026lt; 1.26.\u003c/li\u003e\n\u003cli\u003eNew arg \u003ccode\u003eraise_on_repair\u003c/code\u003e in \u003ccode\u003eDocument.save()\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eNew method \u003ccode\u003eDocument.repair()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.26.7\u003c/strong\u003e (2025-12-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.26.12.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4801 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4801\u0026gt;\u003c/code\u003e_: Build failure dumping all environment variables\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/4bfc665a89f0a2b02897e48f20500d09eab17b6b\"\u003e\u003ccode\u003e4bfc665\u003c/code\u003e\u003c/a\u003e changes.txt: added info about improvements to get_textpage_ocr().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d6fb27d64e42f2058cfbc66177cc9feb77dc44a9\"\u003e\u003ccode\u003ed6fb27d\u003c/code\u003e\u003c/a\u003e Updates for release of 1.27.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/015680eb986d5dea994bc0e2fd9eebda7f26783b\"\u003e\u003ccode\u003e015680e\u003c/code\u003e\u003c/a\u003e Docs: fixes the default system light mode rendering of the page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/447ff2c32d0323552da5fd0de909fb149c055278\"\u003e\u003ccode\u003e447ff2c\u003c/code\u003e\u003c/a\u003e Rework textpage_ocr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1d272d7088682645dd68c8d5175f7e011da5b714\"\u003e\u003ccode\u003e1d272d7\u003c/code\u003e\u003c/a\u003e setup.py: avoid swig director problem on macos with python\u0026lt;3.13.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/30eb43f5daec69416f2232472e74f578a7b3fff2\"\u003e\u003ccode\u003e30eb43f\u003c/code\u003e\u003c/a\u003e setup.py: use default swig for pyodide.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/fcd7fe07db4ab6eba0c3aeb75ca0da35e382fa4b\"\u003e\u003ccode\u003efcd7fe0\u003c/code\u003e\u003c/a\u003e setup.py: use latest swig on macos.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/967b6f82d9ff8b462a16cfe97d3fc267a203da9d\"\u003e\u003ccode\u003e967b6f8\u003c/code\u003e\u003c/a\u003e setup.py: fixed handling of --clean if mupdf is not within pymupdf checkout.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d53ed39df1cc481f72d4bb08420e692fab0bd2fa\"\u003e\u003ccode\u003ed53ed39\u003c/code\u003e\u003c/a\u003e tests/conftest.py: add some platform details to any junit .xml file.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/fc56e4589209d55e73f1b758e59b63b08a47931f\"\u003e\u003ccode\u003efc56e45\u003c/code\u003e\u003c/a\u003e setup.py: removed special casing of python\u0026gt;=3.13 with py_limited_api.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.27.1...1.27.2\"\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.41.0 to 0.42.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn[standard]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.42.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for request body accumulation to avoid O(n^2) allocation on fragmented bodies (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2845\"\u003e#2845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEscape brackets and backslash in httptools \u003ccode\u003eHEADER_RE\u003c/code\u003e regex (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2824\"\u003e#2824\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix multiple issues in websockets sans-io implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2825\"\u003e#2825\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2825\"\u003eKludex/uvicorn#2825\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.41.0...0.42.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.41.0...0.42.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/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.42.0 (March 16, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for request body accumulation to avoid O(n^2) allocation on fragmented bodies (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2845\"\u003e#2845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEscape brackets and backslash in httptools \u003ccode\u003eHEADER_RE\u003c/code\u003e regex (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2824\"\u003e#2824\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix multiple issues in websockets sans-io implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2825\"\u003e#2825\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/02bed6f8c38e74f684bb0e572977a9bfdc1f6fea\"\u003e\u003ccode\u003e02bed6f\u003c/code\u003e\u003c/a\u003e Version 0.42.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2852\"\u003e#2852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/d8f25013161d8206e129e39bf48432d3a85e1744\"\u003e\u003ccode\u003ed8f2501\u003c/code\u003e\u003c/a\u003e chore: pre-create Config objects in benchmarks to measure protocol hot paths ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9dbb7836bb0fdb446d083ecd8dc5a2a95bb96b98\"\u003e\u003ccode\u003e9dbb783\u003c/code\u003e\u003c/a\u003e Add WebSocket protocol benchmarks for wsproto and websockets-sansio (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2849\"\u003e#2849\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b3c69da8c1a36e1834e614abe38243671e156077\"\u003e\u003ccode\u003eb3c69da\u003c/code\u003e\u003c/a\u003e Use bytearray for request body accumulation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2845\"\u003e#2845\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3f3ebee20f46504a3f7279dd72f9c24ce9070b11\"\u003e\u003ccode\u003e3f3ebee\u003c/code\u003e\u003c/a\u003e Disable \u003ccode\u003epytest-xdist\u003c/code\u003e for CodSpeed benchmark runs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2847\"\u003e#2847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/d072de754f825bee4710363dd49d41efd5285dcc\"\u003e\u003ccode\u003ed072de7\u003c/code\u003e\u003c/a\u003e Add fragmented body benchmark for chunked body accumulation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2846\"\u003e#2846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/e300c2c75d71bea6f8d1799ca6f182f1e5583aaa\"\u003e\u003ccode\u003ee300c2c\u003c/code\u003e\u003c/a\u003e Add CodSpeed benchmark suite for HTTP protocol hot paths (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2844\"\u003e#2844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1fa697651bacf10d72f74de104ead814ce6fcdc0\"\u003e\u003ccode\u003e1fa6976\u003c/code\u003e\u003c/a\u003e Escape brackets and backslash in httptools HEADER_RE regex (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2824\"\u003e#2824\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/59ec1de7a4f07afbd139812f033f3af8b784de74\"\u003e\u003ccode\u003e59ec1de\u003c/code\u003e\u003c/a\u003e Fix multiple issues in websockets sansio implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2825\"\u003e#2825\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2fc0efcdd958abd3adbe6ea19682408d6b2e1b18\"\u003e\u003ccode\u003e2fc0efc\u003c/code\u003e\u003c/a\u003e Clarify Windows asyncio event loop selection in docs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2843\"\u003e#2843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.41.0...0.42.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.11.0 to 2.12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/releases\"\u003epyjwt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.12.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd typing_extensions dependency for Python \u0026lt; 3.11 by \u003ca href=\"https://github.com/jpadilla\"\u003e\u003ccode\u003e@​jpadilla\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1151\"\u003ejpadilla/pyjwt#1151\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\"\u003ehttps://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.12.0\u003c/h2\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eValidate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by \u003ca href=\"https://github.com/dmbs335\"\u003e\u003ccode\u003e@​dmbs335\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f\"\u003eGHSA-752w-5fwx-jx9f\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1132\"\u003ejpadilla/pyjwt#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(docs): fix docs build by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1137\"\u003ejpadilla/pyjwt#1137\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAnnotate PyJWKSet.keys for pyright by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1134\"\u003ejpadilla/pyjwt#1134\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: close HTTPError to prevent ResourceWarning on Python 3.14 by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1133\"\u003ejpadilla/pyjwt#1133\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: remove superfluous constants by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1136\"\u003ejpadilla/pyjwt#1136\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1135\"\u003ejpadilla/pyjwt#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(tests): enable mypy by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1138\"\u003ejpadilla/pyjwt#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 7 to 8 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1142\"\u003ejpadilla/pyjwt#1142\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1141\"\u003ejpadilla/pyjwt#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1145\"\u003ejpadilla/pyjwt#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: do not store reference to algorithms dict on PyJWK by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1143\"\u003ejpadilla/pyjwt#1143\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse PyJWK algorithm when encoding without explicit algorithm by \u003ca href=\"https://github.com/jpadilla\"\u003e\u003ccode\u003e@​jpadilla\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1148\"\u003ejpadilla/pyjwt#1148\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/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1137\"\u003ejpadilla/pyjwt#1137\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/jpadilla/pyjwt/pull/1133\"\u003ejpadilla/pyjwt#1133\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0\"\u003ehttps://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.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/jpadilla/pyjwt/blob/master/CHANGELOG.rst\"\u003epyjwt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ccode\u003ev2.12.1 \u0026lt;https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\u0026gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Add missing ``typing_extensions`` dependency for Python \u0026lt; 3.11 in `[#1150](https://github.com/jpadilla/pyjwt/issues/1150) \u0026lt;https://github.com/jpadilla/pyjwt/issues/1150\u0026gt;`__\n\u003ch2\u003e\u003ccode\u003ev2.12.0 \u0026amp;lt;https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0\u0026amp;gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eFixed\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAnnotate PyJWKSet.keys for pyright by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ccode\u003e[#1134](https://github.com/jpadilla/pyjwt/issues/1134) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1134\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003cli\u003eClose \u003ccode\u003eHTTPError\u003c/code\u003e response to prevent \u003ccode\u003eResourceWarning\u003c/code\u003e on Python 3.14 by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ccode\u003e[#1133](https://github.com/jpadilla/pyjwt/issues/1133) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1133\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003cli\u003eDo not keep \u003ccode\u003ealgorithms\u003c/code\u003e dict in PyJWK instances by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ccode\u003e[#1143](https://github.com/jpadilla/pyjwt/issues/1143) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1143\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003cli\u003eValidate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by \u003ca href=\"https://github.com/dmbs335\"\u003e\u003ccode\u003e@​dmbs335\u003c/code\u003e\u003c/a\u003e in \u003ccode\u003eGHSA-752w-5fwx-jx9f \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003cli\u003eUse PyJWK algorithm when encoding without explicit algorithm in \u003ccode\u003e[#1148](https://github.com/jpadilla/pyjwt/issues/1148) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1148\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAdded\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Docs: Add ``PyJWKClient`` API reference and document the two-tier caching system (JWK Set cache and signing key LRU cache).\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/a4e1a3d1218b01c5806420b8f16d9308ac4adc30\"\u003e\u003ccode\u003ea4e1a3d\u003c/code\u003e\u003c/a\u003e Add typing_extensions dependency for Python \u0026lt; 3.11 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/bd9700cca7f9258fadcc429c1034e508025931f2\"\u003e\u003ccode\u003ebd9700c\u003c/code\u003e\u003c/a\u003e Use PyJWK algorithm when encoding without explicit algorithm (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1148\"\u003e#1148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/051ea341b5573fe3edcd53042f347929b92c2b92\"\u003e\u003ccode\u003e051ea34\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/1451d70eca2059bc472703692f0bb0777bc0fe93\"\u003e\u003ccode\u003e1451d70\u003c/code\u003e\u003c/a\u003e fix: do not store reference to algorithms dict on PyJWK (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1143\"\u003e#1143\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/f3ba74c106df9ce10e272dfaad96acb4ab3ef5a5\"\u003e\u003ccode\u003ef3ba74c\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1145\"\u003e#1145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/0318ffa7b156b01600376e38952bf961382e0724\"\u003e\u003ccode\u003e0318ffa\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1141\"\u003e#1141\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/a52753db3c1075ac01337fa8b7cc92b13a19ac09\"\u003e\u003ccode\u003ea52753d\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7 to 8 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1142\"\u003e#1142\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/b85050f1d444c6828bb4618ee764443b0a3f5d18\"\u003e\u003ccode\u003eb85050f\u003c/code\u003e\u003c/a\u003e chore(tests): enable mypy (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1138\"\u003e#1138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/1272b264779717cc481c8341f321a7fc8b3aaba6\"\u003e\u003ccode\u003e1272b26\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1135\"\u003e#1135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/99a87287c26cb97c94399084ee4186ee52207a7f\"\u003e\u003ccode\u003e99a8728\u003c/code\u003e\u003c/a\u003e chore: remove superfluous constants (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1136\"\u003e#1136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.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.15.4 to 0.15.6\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.15.6\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-03-12.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003elazy\u003c/code\u003e import parsing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23755\"\u003e#23755\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for star-unpacking of comprehensions (PEP 798) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23788\"\u003e#23788\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject semantic syntax errors for lazy imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23757\"\u003e#23757\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop a few rules from the preview default set (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23879\"\u003e#23879\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Flag \u003ccode\u003eVariable.get()\u003c/code\u003e calls outside of task execution context (\u003ccode\u003eAIR003\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23584\"\u003e#23584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Flag runtime-varying values in DAG/task constructor arguments (\u003ccode\u003eAIR304\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23631\"\u003e#23631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Implement \u003ccode\u003edelattr-with-constant\u003c/code\u003e (\u003ccode\u003eB043\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23737\"\u003e#23737\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Add \u003ccode\u003eTID254\u003c/code\u003e to enforce lazy imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23777\"\u003e#23777\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Allow users to ban lazy imports with \u003ccode\u003eTID254\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23847\"\u003e#23847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eisort\u003c/code\u003e] Retain \u003ccode\u003elazy\u003c/code\u003e keyword when sorting imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23762\"\u003e#23762\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e automatically (\u003ccode\u003eUP006\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23260\"\u003e#23260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Support \u003ccode\u003enewline\u003c/code\u003e parameter in \u003ccode\u003eFURB101\u003c/code\u003e for Python 3.13+ (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23754\"\u003e#23754\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003eos-path-commonprefix\u003c/code\u003e (\u003ccode\u003eRUF071\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23814\"\u003e#23814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add unsafe fix for os-path-commonprefix (\u003ccode\u003eRUF071\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23852\"\u003e#23852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Limit \u003ccode\u003eRUF036\u003c/code\u003e to typing contexts; make it unsafe for non-typing-only (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23765\"\u003e#23765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Use starred unpacking for \u003ccode\u003eRUF017\u003c/code\u003e in Python 3.15+ (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23789\"\u003e#23789\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e--add-noqa\u003c/code\u003e creating unwanted leading whitespace (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23773\"\u003e#23773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e--add-noqa\u003c/code\u003e breaking shebangs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23577\"\u003e#23577\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[formatter] Fix lambda body formatting for multiline calls and subscripts (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23866\"\u003e#23866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[formatter] Preserve required annotation parentheses in annotated assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23865\"\u003e#23865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[formatter] Preserve type-expression parentheses in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23867\"\u003e#23867\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-annotations\u003c/code\u003e] Fix stack overflow in \u003ccode\u003eANN401\u003c/code\u003e on quoted annotations with escape sequences (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23912\"\u003e#23912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epep8-naming\u003c/code\u003e] Check naming conventions in \u003ccode\u003ematch\u003c/code\u003e pattern bindings (\u003ccode\u003eN806\u003c/code\u003e, \u003ccode\u003eN815\u003c/code\u003e, \u003ccode\u003eN816\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23899\"\u003e#23899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Fix comment duplication in fixes (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23729\"\u003e#23729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Properly trigger \u003ccode\u003esuper\u003c/code\u003e change in nested class (\u003ccode\u003eUP008\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22677\"\u003e#22677\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Avoid syntax errors in \u003ccode\u003eRUF036\u003c/code\u003e fixes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23764\"\u003e#23764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Flag \u003ccode\u003eS501\u003c/code\u003e with \u003ccode\u003erequests.request\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23873\"\u003e#23873\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Fix WSL detection in non-Docker containers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22879\"\u003e#22879\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-print\u003c/code\u003e] Ignore \u003ccode\u003epprint\u003c/code\u003e calls with \u003ccode\u003estream=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23787\"\u003e#23787\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate docs for Markdown code block formatting (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23871\"\u003e#23871\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix misleading description for \u003ccode\u003eB904\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23731\"\u003e#23731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\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/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.15.6\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-03-12.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003elazy\u003c/code\u003e import parsing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23755\"\u003e#23755\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for star-unpacking of comprehensions (PEP 798) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23788\"\u003e#23788\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject semantic syntax errors for lazy imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23757\"\u003e#23757\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop a few rules from the preview default set (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23879\"\u003e#23879\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Flag \u003ccode\u003eVariable.get()\u003c/code\u003e calls outside of task execution context (\u003ccode\u003eAIR003\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23584\"\u003e#23584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Flag runtime-varying values in DAG/task constructor arguments (\u003ccode\u003eAIR304\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23631\"\u003e#23631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Implement \u003ccode\u003edelattr-with-constant\u003c/code\u003e (\u003ccode\u003eB043\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23737\"\u003e#23737\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Add \u003ccode\u003eTID254\u003c/code\u003e to enforce lazy imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23777\"\u003e#23777\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Allow users to ban lazy imports with \u003ccode\u003eTID254\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23847\"\u003e#23847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eisort\u003c/code\u003e] Retain \u003ccode\u003elazy\u003c/code\u003e keyword when sorting imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23762\"\u003e#23762\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e automatically (\u003ccode\u003eUP006\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23260\"\u003e#23260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Support \u003ccode\u003enewline\u003c/code\u003e parameter in \u003ccode\u003eFURB101\u003c/code\u003e for Python 3.13+ (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23754\"\u003e#23754\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003eos-path-commonprefix\u003c/code\u003e (\u003ccode\u003eRUF071\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23814\"\u003e#23814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add unsafe fix for os-path-commonprefix (\u003ccode\u003eRUF071\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23852\"\u003e#23852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Limit \u003ccode\u003eRUF036\u003c/code\u003e to typing contexts; make it unsafe for non-typing-only (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23765\"\u003e#23765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Use starred unpacking for \u003ccode\u003eRUF017\u003c/code\u003e in Python 3.15+ (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23789\"\u003e#23789\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e--add-noqa\u003c/code\u003e creating unwanted leading whitespace (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23773\"\u003e#23773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e--add-noqa\u003c/code\u003e breaking shebangs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23577\"\u003e#23577\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[formatter] Fix lambda body formatting for multiline calls and subscripts (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23866\"\u003e#23866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[formatter] Preserve required annotation parentheses in annotated assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23865\"\u003e#23865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[formatter] Preserve type-expression parentheses in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23867\"\u003e#23867\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-annotations\u003c/code\u003e] Fix stack overflow in \u003ccode\u003eANN401\u003c/code\u003e on quoted annotations with escape sequences (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23912\"\u003e#23912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epep8-naming\u003c/code\u003e] Check naming conventions in \u003ccode\u003ematch\u003c/code\u003e pattern bindings (\u003ccode\u003eN806\u003c/code\u003e, \u003ccode\u003eN815\u003c/code\u003e, \u003ccode\u003eN816\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23899\"\u003e#23899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Fix comment duplication in fixes (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23729\"\u003e#23729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Properly trigger \u003ccode\u003esuper\u003c/code\u003e change in nested class (\u003ccode\u003eUP008\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22677\"\u003e#22677\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Avoid syntax errors in \u003ccode\u003eRUF036\u003c/code\u003e fixes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23764\"\u003e#23764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Flag \u003ccode\u003eS501\u003c/code\u003e with \u003ccode\u003erequests.request\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23873\"\u003e#23873\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Fix WSL detection in non-Docker containers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22879\"\u003e#22879\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-print\u003c/code\u003e] Ignore \u003ccode\u003epprint\u003c/code\u003e calls with \u003ccode\u003estream=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23787\"\u003e#23787\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate docs for Markdown code block formatting (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23871\"\u003e#23871\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix misleading description for \u003ccode\u003eB904\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23731\"\u003e#23731\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/zsol\"\u003e\u003ccode\u003e@​zsol\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/e4c7f357777a2fdd34dbe6a98b1b7d3e7488f675\"\u003e\u003ccode\u003ee4c7f35\u003c/code\u003e\u003c/a\u003e Bump 0.15.6 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23919\"\u003e#23919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/edfe6c17a493669227da45ce7edc786208d9d0b0\"\u003e\u003ccode\u003eedfe6c1\u003c/code\u003e\u003c/a\u003e [ty] Narrow type context during collection literal inference (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23844\"\u003e#23844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/dd16d689abd9d0fa1caf4316e70479fd422b6142\"\u003e\u003ccode\u003edd16d68\u003c/code\u003e\u003c/a\u003e Exclude broken symlink in ecosystem check (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23921\"\u003e#23921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3f94c6ac6397cdc3160459d9d6e3892e3f3242dd\"\u003e\u003ccode\u003e3f94c6a\u003c/code\u003e\u003c/a\u003e Fix stack overflow in ANN401 on quoted annotations with escape sequences (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23\"\u003e#23\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/91fc7bd3f936974d7107ba8fd0668bc251a55c58\"\u003e\u003ccode\u003e91fc7bd\u003c/code\u003e\u003c/a\u003e [ty] Fix false-positive diagnostics for PEP-604 union annotations on attribut...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/04229cffb44dfe8c64a0879eb3cea472a08d1565\"\u003e\u003ccode\u003e04229cf\u003c/code\u003e\u003c/a\u003e [ty] Initial test suite for PEP-728 \u003ccode\u003eTypedDict\u003c/code\u003e features (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23832\"\u003e#23832\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/728b9d6fd300d492fc2572bcfade170141296f97\"\u003e\u003ccode\u003e728b9d6\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epep8-naming\u003c/code\u003e] Check naming conventions in \u003ccode\u003ematch\u003c/code\u003e pattern bindings (\u003ccode\u003eN806\u003c/code\u003e,...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/88d1eecd261679fc9d1d10f30d814230a7f28513\"\u003e\u003ccode\u003e88d1eec\u003c/code\u003e\u003c/a\u003e [ty] Ensure a \u003ccode\u003etype[]\u003c/code\u003e type \u003ccode\u003eT\u003c/code\u003e is always considered assignable to a union th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/37cdd61406ad4965847c9baa7c3f6ca633887d68\"\u003e\u003ccode\u003e37cdd61\u003c/code\u003e\u003c/a\u003e Fix lambda body formatting for multiline calls and subscripts (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23866\"\u003e#23866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a25a4df54aca67d23b4867ddad634fe0768fd6a2\"\u003e\u003ccode\u003ea25a4df\u003c/code\u003e\u003c/a\u003e [ty] Disambiguate duplicate-looking overloaded callables in union display (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/2\"\u003e#2\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.4...0.15.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 7.0.3 to 7.0.5\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst\"\u003ecachetools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev7.0.5 (2026-03-09)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMinor \u003ccode\u003e@cachedmethod\u003c/code\u003e performance improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.4 (2026-03-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix and properly document \u003ccode\u003e@cachedmethod.cache_key\u003c/code\u003e behavior.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMinor documentation improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/5dce86fc5c9c565c6e9c912e2be5d6abb9586a1d\"\u003e\u003ccode\u003e5dce86f\u003c/code\u003e\u003c/a\u003e Release v7.0.5.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/af5e68812b6fc5e432b5098711b5f4dcb5d20ccd\"\u003e\u003ccode\u003eaf5e688\u003c/code\u003e\u003c/a\u003e Minor \u003ca href=\"https://github.com/cachedmethod\"\u003e\u003ccode\u003e@​cachedmethod\u003c/code\u003e\u003c/a\u003e performance improvements.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/0ca75e6049b63faa75c05b9929c83e3507be84a0\"\u003e\u003ccode\u003e0ca75e6\u003c/code\u003e\u003c/a\u003e Relase v7.0.4.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/5b1fa392d07a74774f9eb6796205777c81110f1c\"\u003e\u003ccode\u003e5b1fa39\u003c/code\u003e\u003c/a\u003e Prepare v7.0.4.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/18e5930ced2cf107c273b81d949dbab8ce3f48e1\"\u003e\u003ccode\u003e18e5930\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/218\"\u003e#218\u003c/a\u003e: Fix and properly document \u003ca href=\"https://github.com/cachedmethod\"\u003e\u003ccode\u003e@​cachedmethod\u003c/code\u003e\u003c/a\u003e.cache_key handling.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/98ec79ff8be24ce1346d6a96602f11ccbda4f76f\"\u003e\u003ccode\u003e98ec79f\u003c/code\u003e\u003c/a\u003e Drop \u0026quot;class method\u0026quot; from \u003ca href=\"https://github.com/cachedmethod\"\u003e\u003ccode\u003e@​cachedmethod\u003c/code\u003e\u003c/a\u003e docstring.\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.0.3...v7.0.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.4 to 3.4.6\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.4.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003cbr /\u003e\nmypyc changed the usual binary output for the optimized wheel. Beware, especially if using PyInstaller or alike. See \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/714\"\u003ejawah/charset_normalizer#714\u003c/a\u003e\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/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.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/5478b84058a2a04e2d67a5dabbe0a273706707aa\"\u003e\u003ccode\u003e5478b84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/715\"\u003e#715\u003c/a\u003e from jawah/release-3.4.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5c0a09e2caf1b3977df691916e949e1de4b8a738\"\u003e\u003ccode\u003e5c0a09e\u003c/code\u003e\u003c/a\u003e :heavy_check_mark: add confidence for threading usage, mostly due to lru_cach...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/ef826b28d9f21e0059c93acc69a8bf364126c179\"\u003e\u003ccode\u003eef826b2\u003c/code\u003e\u003c/a\u003e :pencil: update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5564f1aebe56584150a988f565ff69ee316dcefe\"\u003e\u003ccode\u003e5564f1a\u003c/code\u003e\u003c/a\u003e :pencil: update docs accordingly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/0f2cf7d86e7c3ef4b77790a754b048bfada4fd09\"\u003e\u003ccode\u003e0f2cf7d\u003c/code\u003e\u003c/a\u003e :pencil: update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/54a189446becf4f2b42772f0dce89a5ef79fe8cc\"\u003e\u003ccode\u003e54a1894\u003c/code\u003e\u003c/a\u003e :bug: fix --normalize writing to wrong path with multiple files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/2177e28828bb7fcc2f1bed2a2d4463161a180812\"\u003e\u003ccode\u003e2177e28\u003c/code\u003e\u003c/a\u003e :pencil: update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b2497a54ba545dae84be01649d66fd52a7fcfc2d\"\u003e\u003ccode\u003eb2497a5\u003c/code\u003e\u003c/a\u003e :bug: edge case where noise difference between two candidates can be almost i...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/13a5d0b471cfb9b60b8cda84c78b7874c0267123\"\u003e\u003ccode\u003e13a5d0b\u003c/code\u003e\u003c/a\u003e :wrench: upgrade ci requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b9ffbd4e8314b0f733ddb34eef32d80490eb947c\"\u003e\u003ccode\u003eb9ffbd4\u003c/code\u003e\u003c/a\u003e :wrench: enable 3.14t nox mypyc session\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.4...3.4.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `crawlee` from 1.4.0 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/apify/crawlee-python/releases\"\u003ecrawlee's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/apify/crawlee-python/releases/tag/v1.5.0\"\u003e1.5.0\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003e🚀 Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse specialized Playwright docker images in templates (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1757\"\u003e#1757\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/747c0cf4a82296a2e3ea5cac5ef4c9578ea62a0c\"\u003e747c0cf\u003c/a\u003e) by \u003ca href=\"https://github.com/Pijukatel\"\u003e\u003ccode\u003e@​Pijukatel\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ediscover_valid_sitemaps\u003c/code\u003e utility (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1777\"\u003e#1777\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/872447b60bbdb3926068064a971492807b1bdfbb\"\u003e872447b\u003c/a\u003e) by \u003ca href=\"https://github.com/Mantisus\"\u003e\u003ccode\u003e@​Mantisus\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent list modification during iteration in BrowserPool (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1703\"\u003e#1703\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/70309d9bf568d268a26b3ba6392be2b6ff284c65\"\u003e70309d9\u003c/a\u003e) by \u003ca href=\"https://github.com/vdusek\"\u003e\u003ccode\u003e@​vdusek\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e max_requests_per_crawl\u003c/code\u003e excluding failed requests (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1766\"\u003e#1766\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/d6bb0b4a9dc5dd6668d076fbfa1b5e748deaee0d\"\u003ed6bb0b4\u003c/a\u003e) by \u003ca href=\"https://github.com/Pijukatel\"\u003e\u003ccode\u003e@​Pijukatel\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplaywright:\u003c/strong\u003e Dispose of \u003ccode\u003eAPIResponse\u003c/code\u003e body for \u003ccode\u003esend_request\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1771\"\u003e#1771\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/29d301bf9d7795f2fbaddb99235a7157b880f60c\"\u003e29d301b\u003c/a\u003e) by \u003ca href=\"https://github.com/kozlice\"\u003e\u003ccode\u003e@​kozlice\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReturn \u003ccode\u003eNone\u003c/code\u003e from \u003ccode\u003eadd_request\u003c/code\u003e when storage client fails to enqueue request (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1775\"\u003e#1775\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/944753a71956c30f3ce0896ffa24be7de5348933\"\u003e944753a\u003c/a\u003e) by \u003ca href=\"https://github.com/Mantisus\"\u003e\u003ccode\u003e@​Mantisus\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRe-use pre-existing browser context in \u003ccode\u003ePlaywrightBrowserController\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1778\"\u003e#1778\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/44875433df83d433aa69ada458b91df3ad569f5e\"\u003e4487543\u003c/a\u003e) by \u003ca href=\"https://github.com/Pijukatel\"\u003e\u003ccode\u003e@​Pijukatel\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/apify/crawlee-python/blob/master/CHANGELOG.md\"\u003ecrawlee's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/apify/crawlee-python/releases/tag/v1.5.0\"\u003e1.5.0\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003e🚀 Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse specialized Playwright docker images in templates (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1757\"\u003e#1757\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/747c0cf4a82296a2e3ea5cac5ef4c9578ea62a0c\"\u003e747c0cf\u003c/a\u003e) by \u003ca href=\"https://github.com/Pijukatel\"\u003e\u003ccode\u003e@​Pijukatel\u003c/code\u003e\u003c/a\u003e, closes \u003ca href=\"https://redirect.github.com/apify/crawlee-python/issues/1756\"\u003e#1756\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ediscover_valid_sitemaps\u003c/code\u003e utility (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1777\"\u003e#1777\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/872447b60bbdb3926068064a971492807b1bdfbb\"\u003e872447b\u003c/a\u003e) by \u003ca href=\"https://github.com/Mantisus\"\u003e\u003ccode\u003e@​Mantisus\u003c/code\u003e\u003c/a\u003e, closes \u003ca href=\"https://redirect.github.com/apify/crawlee-python/issues/1740\"\u003e#1740\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent list modification during iteration in BrowserPool (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1703\"\u003e#1703\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/70309d9bf568d268a26b3ba6392be2b6ff284c65\"\u003e70309d9\u003c/a\u003e) by \u003ca href=\"https://github.com/vdusek\"\u003e\u003ccode\u003e@​vdusek\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e max_requests_per_crawl\u003c/code\u003e excluding failed requests (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1766\"\u003e#1766\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/d6bb0b4a9dc5dd6668d076fbfa1b5e748deaee0d\"\u003ed6bb0b4\u003c/a\u003e) by \u003ca href=\"https://github.com/Pijukatel\"\u003e\u003ccode\u003e@​Pijukatel\u003c/code\u003e\u003c/a\u003e, closes \u003ca href=\"https://redirect.github.com/apify/crawlee-python/issues/1765\"\u003e#1765\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplaywright:\u003c/strong\u003e Dispose of \u003ccode\u003eAPIResponse\u003c/code\u003e body for \u003ccode\u003esend_request\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1771\"\u003e#1771\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/29d301bf9d7795f2fbaddb99235a7157b880f60c\"\u003e29d301b\u003c/a\u003e) by \u003ca href=\"https://github.com/kozlice\"\u003e\u003ccode\u003e@​kozlice\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReturn \u003ccode\u003eNone\u003c/code\u003e from \u003ccode\u003eadd_request\u003c/code\u003e when storage client fails to enqueue request (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1775\"\u003e#1775\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/...\n\n_Description has been truncated_","html_url":"https://github.com/po4yka/bite-size-reader/pull/199","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/po4yka%2Fbite-size-reader/issues/199","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/199/packages"}],"issue_packages":[{"old_version":"1.24.9","new_version":"1.27.2.3","update_type":"minor","path":null,"pr_created_at":"2026-06-08T01:09:53.000Z","version_change":"1.24.9 → 1.27.2.3","issue":{"uuid":"4609344616","node_id":"PR_kwDOSeKPUc7juHdh","number":13,"state":"closed","title":"chore(deps): bump the backend-minor-patch group across 1 directory with 12 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-15T01:10:26.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-08T01:09:53.000Z","updated_at":"2026-06-15T01:10:28.000Z","time_to_close":604833,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"backend-minor-patch","update_count":12,"packages":[{"name":"ruff","old_version":"0.15.15","new_version":"0.15.16","repository_url":"https://github.com/astral-sh/ruff"},{"name":"fastapi","old_version":"0.115.0","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.30.6","new_version":"0.49.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"python-multipart","old_version":"0.0.9","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"httpx","old_version":"0.27.2","new_version":"0.28.1","repository_url":"https://github.com/encode/httpx"},{"name":"pdfplumber","old_version":"0.11.4","new_version":"0.11.9","repository_url":"https://github.com/jsvine/pdfplumber"},{"name":"pymupdf","old_version":"1.24.9","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"python-docx","old_version":"1.1.2","new_version":"1.2.0","repository_url":"https://github.com/python-openxml/python-docx"},{"name":"python-dotenv","old_version":"1.0.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"sqlalchemy","old_version":"2.0.36","new_version":"2.0.50","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"psycopg","old_version":"3.2.3","new_version":"3.3.4","repository_url":"https://github.com/psycopg/psycopg"},{"name":"alembic","old_version":"1.13.3","new_version":"1.18.4","repository_url":"https://github.com/sqlalchemy/alembic"}],"path":null,"ecosystem":"pip"},"body":"Bumps the backend-minor-patch group with 12 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.15` | `0.15.16` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.115.0` | `0.136.3` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.30.6` | `0.49.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.9` | `0.0.32` |\n| [httpx](https://github.com/encode/httpx) | `0.27.2` | `0.28.1` |\n| [pdfplumber](https://github.com/jsvine/pdfplumber) | `0.11.4` | `0.11.9` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.24.9` | `1.27.2.3` |\n| [python-docx](https://github.com/python-openxml/python-docx) | `1.1.2` | `1.2.0` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.0.1` | `1.2.2` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.36` | `2.0.50` |\n| [psycopg](https://github.com/psycopg/psycopg) | `3.2.3` | `3.3.4` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.13.3` | `1.18.4` |\n\n\nUpdates `ruff` from 0.15.15 to 0.15.16\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.15.16\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-04.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Implement \u003ccode\u003eyield-in-context-manager-in-async-generator\u003c/code\u003e (\u003ccode\u003eASYNC119\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24644\"\u003e#24644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Narrow diagnostic range and exclude cases without exception handlers (\u003ccode\u003ePLW0717\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25440\"\u003e#25440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Treat \u003ccode\u003eyield\u003c/code\u003e before \u003ccode\u003ebreak\u003c/code\u003e from a terminal loop as terminal (\u003ccode\u003eRUF075\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25447\"\u003e#25447\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eeradicate\u003c/code\u003e] Avoid flagging \u003ccode\u003eruff:ignore\u003c/code\u003e comments as code (\u003ccode\u003eERA001\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25537\"\u003e#25537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eeradicate\u003c/code\u003e] Fix \u003ccode\u003eERA001\u003c/code\u003e/\u003ccode\u003eRUF100\u003c/code\u003e conflict when \u003ccode\u003enoqa\u003c/code\u003e is on commented-out code (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25414\"\u003e#25414\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Avoid removing the \u003ccode\u003eformat\u003c/code\u003e call when it would change behavior (\u003ccode\u003eF523\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25320\"\u003e#25320\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (\u003ccode\u003ePLE2510\u003c/code\u003e, \u003ccode\u003ePLE2512\u003c/code\u003e, \u003ccode\u003ePLE2513\u003c/code\u003e, \u003ccode\u003ePLE2514\u003c/code\u003e, \u003ccode\u003ePLE2515\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25544\"\u003e#25544\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Avoid converting \u003ccode\u003eformat\u003c/code\u003e calls with more kinds of side effects (\u003ccode\u003eUP032\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25484\"\u003e#25484\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pytest-style\u003c/code\u003e] Avoid fixes for ambiguous \u003ccode\u003eargnames\u003c/code\u003e and \u003ccode\u003eargvalues\u003c/code\u003e combinations (\u003ccode\u003ePT006\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24776\"\u003e#24776\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop excess capacity from statement suites during parsing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25368\"\u003e#25368\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Improve discoverability of rules enabled for each convention (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24973\"\u003e#24973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Restore example code for Python versions before 3.15 (\u003ccode\u003eRUF017\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25439\"\u003e#25439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typo \u003ccode\u003ebin/active\u003c/code\u003e → \u003ccode\u003ebin/activate\u003c/code\u003e in tutorial (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25473\"\u003e#25473\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eShrink additional parser AST collections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25465\"\u003e#25465\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/Redslayer112\"\u003e\u003ccode\u003e@​Redslayer112\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koriyoshi2041\"\u003e\u003ccode\u003e@​koriyoshi2041\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/George-Ogden\"\u003e\u003ccode\u003e@​George-Ogden\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TejasAmle\"\u003e\u003ccode\u003e@​TejasAmle\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\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/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/loganrosen\"\u003e\u003ccode\u003e@​loganrosen\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/RafaelJohn9\"\u003e\u003ccode\u003e@​RafaelJohn9\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adityasingh2400\"\u003e\u003ccode\u003e@​adityasingh2400\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.15.16\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-04.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Implement \u003ccode\u003eyield-in-context-manager-in-async-generator\u003c/code\u003e (\u003ccode\u003eASYNC119\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24644\"\u003e#24644\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Narrow diagnostic range and exclude cases without exception handlers (\u003ccode\u003ePLW0717\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25440\"\u003e#25440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Treat \u003ccode\u003eyield\u003c/code\u003e before \u003ccode\u003ebreak\u003c/code\u003e from a terminal loop as terminal (\u003ccode\u003eRUF075\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25447\"\u003e#25447\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eeradicate\u003c/code\u003e] Avoid flagging \u003ccode\u003eruff:ignore\u003c/code\u003e comments as code (\u003ccode\u003eERA001\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25537\"\u003e#25537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eeradicate\u003c/code\u003e] Fix \u003ccode\u003eERA001\u003c/code\u003e/\u003ccode\u003eRUF100\u003c/code\u003e conflict when \u003ccode\u003enoqa\u003c/code\u003e is on commented-out code (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25414\"\u003e#25414\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Avoid removing the \u003ccode\u003eformat\u003c/code\u003e call when it would change behavior (\u003ccode\u003eF523\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25320\"\u003e#25320\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (\u003ccode\u003ePLE2510\u003c/code\u003e, \u003ccode\u003ePLE2512\u003c/code\u003e, \u003ccode\u003ePLE2513\u003c/code\u003e, \u003ccode\u003ePLE2514\u003c/code\u003e, \u003ccode\u003ePLE2515\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25544\"\u003e#25544\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Avoid converting \u003ccode\u003eformat\u003c/code\u003e calls with more kinds of side effects (\u003ccode\u003eUP032\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25484\"\u003e#25484\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pytest-style\u003c/code\u003e] Avoid fixes for ambiguous \u003ccode\u003eargnames\u003c/code\u003e and \u003ccode\u003eargvalues\u003c/code\u003e combinations (\u003ccode\u003ePT006\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24776\"\u003e#24776\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDrop excess capacity from statement suites during parsing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25368\"\u003e#25368\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Improve discoverability of rules enabled for each convention (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24973\"\u003e#24973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Restore example code for Python versions before 3.15 (\u003ccode\u003eRUF017\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25439\"\u003e#25439\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix typo \u003ccode\u003ebin/active\u003c/code\u003e → \u003ccode\u003ebin/activate\u003c/code\u003e in tutorial (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25473\"\u003e#25473\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eShrink additional parser AST collections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25465\"\u003e#25465\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/Redslayer112\"\u003e\u003ccode\u003e@​Redslayer112\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/koriyoshi2041\"\u003e\u003ccode\u003e@​koriyoshi2041\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/George-Ogden\"\u003e\u003ccode\u003e@​George-Ogden\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TejasAmle\"\u003e\u003ccode\u003e@​TejasAmle\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\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/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/loganrosen\"\u003e\u003ccode\u003e@​loganrosen\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/RafaelJohn9\"\u003e\u003ccode\u003e@​RafaelJohn9\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adityasingh2400\"\u003e\u003ccode\u003e@​adityasingh2400\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/astral-sh/ruff/commit/6c498ab5394edc5622d7f348e12956bf86203716\"\u003e\u003ccode\u003e6c498ab\u003c/code\u003e\u003c/a\u003e Bump 0.15.16 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25635\"\u003e#25635\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e51e132831c4e1c4a5ac00fca4c9256354ab99bf\"\u003e\u003ccode\u003ee51e132\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-async\u003c/code\u003e] Implement \u003ccode\u003eyield-in-context-manager-in-async-generator\u003c/code\u003e (`AS...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7c6dcd9f2611999c449143d241c582dedf287964\"\u003e\u003ccode\u003e7c6dcd9\u003c/code\u003e\u003c/a\u003e [ty] Add caching for pattern match narrowing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25613\"\u003e#25613\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/27058fc071b542bf06395ba89cabed061d313ca6\"\u003e\u003ccode\u003e27058fc\u003c/code\u003e\u003c/a\u003e [ty] Compact retained definition and expression identities (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25606\"\u003e#25606\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/bf80d05f007c939799f530c9e775ed9449f5b2eb\"\u003e\u003ccode\u003ebf80d05\u003c/code\u003e\u003c/a\u003e Fix CODEOWNERS syntax (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25622\"\u003e#25622\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/10ccd511e94a81d1e836b174f1c553a73ff3f1b3\"\u003e\u003ccode\u003e10ccd51\u003c/code\u003e\u003c/a\u003e Shrink additional parser AST collections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25465\"\u003e#25465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0d7135f4d23e7f4d8404daed16b9ef11d14f3fb9\"\u003e\u003ccode\u003e0d7135f\u003c/code\u003e\u003c/a\u003e [ty] Upgrade Salsa (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25545\"\u003e#25545\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/49493a3cea83a08fa9aa143695017c816a540f1d\"\u003e\u003ccode\u003e49493a3\u003c/code\u003e\u003c/a\u003e [ty] Show type alias value on hover (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25381\"\u003e#25381\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/85207d3b7657a84252f266766cb0d56034dc21cc\"\u003e\u003ccode\u003e85207d3\u003c/code\u003e\u003c/a\u003e [ty] sys.implementation.version is not sys.version_info (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25608\"\u003e#25608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a8a0614348c1fcf47fc9b666eff61a103914d520\"\u003e\u003ccode\u003ea8a0614\u003c/code\u003e\u003c/a\u003e [ty] Avoid retaining duplicate function signatures (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25609\"\u003e#25609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.15...0.15.16\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi` from 0.115.0 to 0.136.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🍱 Update sponsors: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Fix image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✏️ Fix Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15530\"\u003e#15530\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15529\"\u003e#15529\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15528\"\u003e#15528\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15525\"\u003e#15525\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15524\"\u003e#15524\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15522\"\u003e#15522\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15523\"\u003e#15523\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15520\"\u003e#15520\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15521\"\u003e#15521\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\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/fastapi/fastapi/commit/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.115.0...0.136.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.30.6 to 0.49.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.49.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump httptools minimum version to 0.8.0 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/2962\"\u003eKludex/uvicorn#2962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) 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/2971\"\u003eKludex/uvicorn#2971\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.48.0...0.49.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults 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/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\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.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.47.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process 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/2919\"\u003eKludex/uvicorn#2919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration 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/2920\"\u003eKludex/uvicorn#2920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2927\"\u003eKludex/uvicorn#2927\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.46.0...0.47.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio 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/2917\"\u003eKludex/uvicorn#2917\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.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.45.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware 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/2903\"\u003eKludex/uvicorn#2903\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2905\"\u003eKludex/uvicorn#2905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively 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/2907\"\u003eKludex/uvicorn#2907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config 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/2906\"\u003eKludex/uvicorn#2906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert empty context for ASGI runs 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/2911\"\u003eKludex/uvicorn#2911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context 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/2912\"\u003eKludex/uvicorn#2912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2913\"\u003eKludex/uvicorn#2913\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/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2870\"\u003eKludex/uvicorn#2870\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.44.0...0.45.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.44.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplement websocket keepalive pings for websockets-sansio 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/2888\"\u003eKludex/uvicorn#2888\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/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.49.0 (June 3, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003ehttptools\u003c/code\u003e minimum version to 0.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2962\"\u003e#2962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (reverses the 0.48.0 behavior of ignoring them) (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.47.0 (May 14, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2920\"\u003e#2920\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2927\"\u003e#2927\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.45.0 (April 21, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2905\"\u003e#2905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\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/3ef2e3e08e3d9ad9572800f8bc54f3eaed9eab0a\"\u003e\u003ccode\u003e3ef2e3e\u003c/code\u003e\u003c/a\u003e Version 0.49.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2973\"\u003e#2973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/eeb64b1d1c95a14096ed3313377c74b485f558fc\"\u003e\u003ccode\u003eeeb64b1\u003c/code\u003e\u003c/a\u003e Consume duplicate forwarding headers in ProxyHeadersMiddleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/630f4aca14e79183617c71be714030842a1041c5\"\u003e\u003ccode\u003e630f4ac\u003c/code\u003e\u003c/a\u003e Make the watchfiles reload tests deterministic (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2972\"\u003e#2972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9154922e3730f7aba68ecc3ecbf536680ee8fd1c\"\u003e\u003ccode\u003e9154922\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group across 1 directory with 6 updates ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/739727a1d80e468d1e47e98bbd824ee9e3c9554b\"\u003e\u003ccode\u003e739727a\u003c/code\u003e\u003c/a\u003e Migrate docs deploy from Cloudflare Pages to Workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2967\"\u003e#2967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/be4a240488d3fb678a11b8e8f83505266f5f1de7\"\u003e\u003ccode\u003ebe4a240\u003c/code\u003e\u003c/a\u003e Gate docs preview deploy on Cloudflare token presence (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/c489d7e10dfe653a2bba914feedf2a632a026e6f\"\u003e\u003ccode\u003ec489d7e\u003c/code\u003e\u003c/a\u003e Bump httptools minimum version to 0.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2962\"\u003e#2962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9f547bd82ef52bcba206e04170b359bd6daa25b3\"\u003e\u003ccode\u003e9f547bd\u003c/code\u003e\u003c/a\u003e Skip docs preview deploy for Dependabot PRs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2961\"\u003e#2961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/44446b894e37ca76830d6aa83df4349795400ed4\"\u003e\u003ccode\u003e44446b8\u003c/code\u003e\u003c/a\u003e Migrate documentation from MkDocs Material to Zensical (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2959\"\u003e#2959\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/cfd659c4f18b526adce9c255c96707bab20af40c\"\u003e\u003ccode\u003ecfd659c\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions to 10.21.3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2958\"\u003e#2958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.30.6...0.49.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.9 to 0.0.32\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.32\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace per-byte partial-boundary scan with rfind lookbehind 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/python-multipart/pull/300\"\u003eKludex/python-multipart#300\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/python-multipart/compare/0.0.31...0.0.32\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.31\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch 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/python-multipart/pull/295\"\u003eKludex/python-multipart#295\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating 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/python-multipart/pull/296\"\u003eKludex/python-multipart#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate Content-Length is non-negative in parse_form 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/python-multipart/pull/297\"\u003eKludex/python-multipart#297\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/python-multipart/compare/0.0.30...0.0.31\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.30\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTreat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator 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/python-multipart/pull/290\"\u003eKludex/python-multipart#290\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003eKludex/python-multipart#291\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/python-multipart/compare/0.0.29...0.0.30\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.29\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle malformed RFC 2231 continuations in \u003ccode\u003eparse_options_header\u003c/code\u003e by \u003ca href=\"https://github.com/manunio\"\u003e\u003ccode\u003e@​manunio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/270\"\u003eKludex/python-multipart#270\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/python-multipart/compare/0.0.28...0.0.29\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.28...0.0.29\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.28\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary tail scan via \u003ccode\u003ebytes.find\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/281\"\u003eKludex/python-multipart#281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCap multipart boundary length at 256 bytes 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/python-multipart/pull/282\"\u003eKludex/python-multipart#282\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/python-multipart/compare/0.0.27...0.0.28\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.27...0.0.28\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.27\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePass parse offsets via constructors 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/python-multipart/pull/268\"\u003eKludex/python-multipart#268\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd multipart header limits 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/python-multipart/pull/267\"\u003eKludex/python-multipart#267\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/python-multipart/compare/0.0.26...0.0.27\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.26\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSkip preamble before first multipart boundary 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/python-multipart/pull/262\"\u003eKludex/python-multipart#262\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilently discard epilogue data after the closing boundary 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/python-multipart/pull/259\"\u003eKludex/python-multipart#259\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/Kludex/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.32 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary scanning for CR/LF-dense part data \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003e#300\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.31 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003e#295\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003e#296\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eValidate \u003ccode\u003eContent-Length\u003c/code\u003e is non-negative in \u003ccode\u003eparse_form\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003e#297\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.30 (2026-05-31)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eParse \u003ccode\u003eapplication/x-www-form-urlencoded\u003c/code\u003e bodies per the WHATWG URL standard, treating only \u003ccode\u003e\u0026amp;\u003c/code\u003e as a field separator \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/290\"\u003e#290\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231/5987 extended parameters (\u003ccode\u003ename*\u003c/code\u003e, \u003ccode\u003efilename*\u003c/code\u003e) in \u003ccode\u003eparse_options_header\u003c/code\u003e, keeping the plain parameter authoritative per \u003ca href=\"https://datatracker.ietf.org/doc/html/rfc7578#section-4.2\"\u003eRFC 7578 §4.2\u003c/a\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003e#291\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.29 (2026-05-17)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle malformed RFC 2231 continuations in \u003ccode\u003eparse_options_header\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/270\"\u003e#270\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.28 (2026-05-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary tail scan via \u003ccode\u003ebytes.find\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/281\"\u003e#281\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCap multipart boundary length at 256 bytes \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/282\"\u003e#282\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.27 (2026-04-27)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd multipart header limits \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/267\"\u003e#267\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePass parse offsets via constructors \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/268\"\u003e#268\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.26 (2026-04-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSkip preamble before the first multipart boundary more efficiently \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/262\"\u003e#262\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSilently discard epilogue data after the closing multipart boundary \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/259\"\u003e#259\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.25 (2026-04-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd MIME content type info to \u003ccode\u003eFile\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/143\"\u003e#143\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eHandle CTE values case-insensitively \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/258\"\u003e#258\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eRemove custom \u003ccode\u003eFormParser\u003c/code\u003e classes \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/257\"\u003e#257\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eUPLOAD_DELETE_TMP\u003c/code\u003e to \u003ccode\u003eFormParser\u003c/code\u003e config \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/254\"\u003e#254\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eEmit \u003ccode\u003efield_end\u003c/code\u003e for trailing bare field names on finalize \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/230\"\u003e#230\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eHandle multipart headers case-insensitively \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/252\"\u003e#252\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eApply Apache-2.0 properly \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/247\"\u003e#247\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.24 (2026-04-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eValidate \u003ccode\u003echunk_size\u003c/code\u003e in \u003ccode\u003eparse_form()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/244\"\u003e#244\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.23 (2026-04-05)\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/Kludex/python-multipart/commit/238ead62a0bb6f6cdfe122708faa13812f59f9a6\"\u003e\u003ccode\u003e238ead6\u003c/code\u003e\u003c/a\u003e Version 0.0.32 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/302\"\u003e#302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/86729796093b04f7cf414ea6c2c4499e2a5750af\"\u003e\u003ccode\u003e8672979\u003c/code\u003e\u003c/a\u003e Replace per-byte partial-boundary scan with rfind lookbehind (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/300\"\u003e#300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/8190779d8234c8bf8cbed7891c11d4bfb79e84df\"\u003e\u003ccode\u003e8190779\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 7 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/301\"\u003e#301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/0d3c086d237f6fd20fefe8853e95979276a07c44\"\u003e\u003ccode\u003e0d3c086\u003c/code\u003e\u003c/a\u003e Use uv package ecosystem for Dependabot (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/4cffc68a165f7a6f6b7756ce006fabf07a05b7a4\"\u003e\u003ccode\u003e4cffc68\u003c/code\u003e\u003c/a\u003e Version 0.0.31 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/c814948acf509cef7881fa75c969969b19239bbf\"\u003e\u003ccode\u003ec814948\u003c/code\u003e\u003c/a\u003e Reject negative \u003ccode\u003eContent-Length\u003c/code\u003e in \u003ccode\u003eparse_form\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/297\"\u003e#297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6b837d47bc68826ed5cbbcb50c6c6a6093444494\"\u003e\u003ccode\u003e6b837d4\u003c/code\u003e\u003c/a\u003e Bound header field name size before validating (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/e0c4f9df2e737d1663fbbdd6563f80613a2089f9\"\u003e\u003ccode\u003ee0c4f9d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/294\"\u003e#294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b8a01bb683e8e8675fdb5d831b206a478c8215aa\"\u003e\u003ccode\u003eb8a01bb\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6732164f30c58e28589a1e22213d2f6b8c6bad9f\"\u003e\u003ccode\u003e6732164\u003c/code\u003e\u003c/a\u003e Speed up multipart header parsing and callback dispatch (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.9...0.0.32\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpx` from 0.27.2 to 0.28.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/releases\"\u003ehttpx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.28.1\u003c/h2\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 0.28.0\u003c/h2\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/HEAD/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\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/encode/httpx/blob/master/CHANGELOG.md\"\u003ehttpx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eBe aware that the default \u003cem\u003eJSON request bodies now use a more compact representation\u003c/em\u003e. This is generally considered a prefered style, tho may require updates to test suites.\u003c/p\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations...\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/master/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\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/encode/httpx/commit/26d48e0634e6ee9cdc0533996db289ce4b430177\"\u003e\u003ccode\u003e26d48e0\u003c/code\u003e\u003c/a\u003e Version 0.28.1 (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3445\"\u003e#3445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/89599a9541af14bcf906fc4ed58ccbdf403802ba\"\u003e\u003ccode\u003e89599a9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003everify=False\u003c/code\u003e, \u003ccode\u003ecert=...\u003c/code\u003e case. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3442\"\u003e#3442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/8ecb86f0d74ffc52d4663214fae9526bee89358d\"\u003e\u003ccode\u003e8ecb86f\u003c/code\u003e\u003c/a\u003e Add test for request params behavior changes (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3440\"\u003e#3440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/0cb7e5a2e736628e2f506d259fcf0d48cd2bde82\"\u003e\u003ccode\u003e0cb7e5a\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 11 updates (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3434\"\u003e#3434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/15e21e9ea3cad4f06e22a7e704aabefdf43d2e29\"\u003e\u003ccode\u003e15e21e9\u003c/code\u003e\u003c/a\u003e Updating deprecated docstring Client() class (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3426\"\u003e#3426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/80960fa31918d7663c3f4c3ad61661cf0e80628f\"\u003e\u003ccode\u003e80960fa\u003c/code\u003e\u003c/a\u003e Version 0.28.0. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3419\"\u003e#3419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/a33c87852b8a0dddc65e5f739af1e0a6fca4b91f\"\u003e\u003ccode\u003ea33c878\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eextensions\u003c/code\u003e type annotation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3380\"\u003e#3380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/ce7e14da27abba6574be9b3ea7cd5990556a9343\"\u003e\u003ccode\u003ece7e14d\u003c/code\u003e\u003c/a\u003e Error on verify as str. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3418\"\u003e#3418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/47f4a96ffaaaa07dca1614409549b5d7a6e7af49\"\u003e\u003ccode\u003e47f4a96\u003c/code\u003e\u003c/a\u003e Handle empty zstd responses (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3412\"\u003e#3412\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/189fc4bcbe5f314128775dec66a616ac9a31ad48\"\u003e\u003ccode\u003e189fc4b\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md, fix typo(s) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3406\"\u003e#3406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/httpx/compare/0.27.2...0.28.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pdfplumber` from 0.11.4 to 0.11.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jsvine/pdfplumber/releases\"\u003epdfplumber's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.11.9\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251107\u003c/code\u003e to \u003ccode\u003e20251230\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/75bbed3\"\u003e75bbed3\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1524ce4\"\u003e1524ce4\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/26687c3\"\u003e26687c3\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/9555532\"\u003e9555532\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.11.8\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eedge_min_length_prefilter\u003c/code\u003e table setting for initial edge filtering. Lowering this setting enables capturing small edge segments (e.g., dashed lines) that would be filtered out with the default minimum length of 1. Raising this setting would be less common but plausible. (h/t \u003ca href=\"https://github.com/bronislav\"\u003e\u003ccode\u003e@​bronislav\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1274\"\u003e#1274\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20250506\u003c/code\u003e to \u003ccode\u003e20251107\u003c/code\u003e (h/t \u003ca href=\"https://github.com/henry-renner-v\"\u003e\u003ccode\u003e@​henry-renner-v\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/pull/1348/commits/0079187ab5493f4440147cde83ee627cab081079\"\u003e0079187\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.11.7\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd access to \u003ccode\u003ePage.trimbox\u003c/code\u003e, \u003ccode\u003ePage.bleedbox\u003c/code\u003e, and \u003ccode\u003ePage.artbox\u003c/code\u003e (h/t \u003ca href=\"https://github.com/samuelbradshaw\"\u003e\u003ccode\u003e@​samuelbradshaw\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1313\"\u003e#1313\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/7e364e6193c6e8bafa9b46587c0fdd4a46405399\"\u003e7e364e6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20250327\u003c/code\u003e to \u003ccode\u003e20250506\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/4c7e092\"\u003e4c7e092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003estroking_pattern\u003c/code\u003e and \u003ccode\u003enon_stroking_pattern\u003c/code\u003e object attributes, due to changes in \u003ccode\u003epdfminer.six\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/4c7e092\"\u003e4c7e092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.11.6\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20231228\u003c/code\u003e to \u003ccode\u003e20250327\u003c/code\u003e (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/3fcb493\"\u003e3fcb493\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/12a73a2\"\u003e12a73a2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse csv.QUOTE_MINIMAL for .to_csv(...) (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/980494a\"\u003e980494a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix bug with \u003ccode\u003euse_text_flow=True\u003c/code\u003e text extraction (h/t \u003ca href=\"https://github.com/samuelbradshaw\"\u003e\u003ccode\u003e@​samuelbradshaw\u003c/code\u003e\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1279\"\u003e#1279\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/e15ed98\"\u003ee15ed98\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCatch exceptions from pdfminer and malformed PDFs (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/43ccc5b\"\u003e43ccc5b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMore broadly handle RecursionError (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/748ff31\"\u003e748ff31\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRemoved\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove test_issue_1089 (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1263\"\u003e#1263\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/7e28e76\"\u003e7e28e76\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.11.5\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--format text\u003c/code\u003e options to CLI (in addition to previously-available \u003ccode\u003ecsv\u003c/code\u003e and \u003ccode\u003ejson\u003c/code\u003e) (h/t \u003ca href=\"https://github.com/brandonrobertz\"\u003e\u003ccode\u003e@​brandonrobertz\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/pull/1235\"\u003e#1235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eraise_unicode_errors: bool\u003c/code\u003e parameter to \u003ccode\u003epdfplumber.open()\u003c/code\u003e to allow bypassing \u003ccode\u003eUnicodeDecodeError\u003c/code\u003es in annotation-parsing and generate warnings instead (h/t \u003ca href=\"https://github.com/stolarczyk\"\u003e\u003ccode\u003e@​stolarczyk\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1195\"\u003e#1195\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ename\u003c/code\u003e property to \u003ccode\u003eimage\u003c/code\u003e objects (h/t \u003ca href=\"https://github.com/djr2015\"\u003e\u003ccode\u003e@​djr2015\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/discussions/1201\"\u003e#1201\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003ePageImage.debug_tablefinder(...)\u003c/code\u003e so that its main keyword argument is named the same (\u003ccode\u003etable_settings=\u003c/code\u003e) as other related \u003ccode\u003ePage\u003c/code\u003e methods (h/t \u003ca href=\"https://github.com/stolarczyk\"\u003e\u003ccode\u003e@​stolarczyk\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1237\"\u003e#1237\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/jsvine/pdfplumber/blob/stable/CHANGELOG.md\"\u003epdfplumber's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.9 — 2026-01-05\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251107\u003c/code\u003e to \u003ccode\u003e20251230\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/75bbed3\"\u003e75bbed3\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1524ce4\"\u003e1524ce4\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/26687c3\"\u003e26687c3\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/9555532\"\u003e9555532\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[0.11.8] - 2025-11-08\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eedge_min_length_prefilter\u003c/code\u003e table setting for initial edge filtering. Lowering this setting enables capturing small edge segments (e.g., dashed lines) that would be filtered out with the default minimum length of 1. Raising this setting would be less common but plausible. (h/t \u003ca href=\"https://github.com/bronislav\"\u003e\u003ccode\u003e@​bronislav\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1274\"\u003e#1274\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20250506\u003c/code\u003e to \u003ccode\u003e20251107\u003c/code\u003e (h/t \u003ca href=\"https://github.com/henry-renner-v\"\u003e\u003ccode\u003e@​henry-renner-v\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/pull/1348/commits/0079187ab5493f4440147cde83ee627cab081079\"\u003e0079187\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[0.11.7] - 2025-06-12\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd access to \u003ccode\u003ePage.trimbox\u003c/code\u003e, \u003ccode\u003ePage.bleedbox\u003c/code\u003e, and \u003ccode\u003ePage.artbox\u003c/code\u003e (h/t \u003ca href=\"https://github.com/samuelbradshaw\"\u003e\u003ccode\u003e@​samuelbradshaw\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1313\"\u003e#1313\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/7e364e6193c6e8bafa9b46587c0fdd4a46405399\"\u003e7e364e6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20250327\u003c/code\u003e to \u003ccode\u003e20250506\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/4c7e092\"\u003e4c7e092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003estroking_pattern\u003c/code\u003e and \u003ccode\u003enon_stroking_pattern\u003c/code\u003e object attributes, due to changes in \u003ccode\u003epdfminer.six\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/4c7e092\"\u003e4c7e092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[0.11.6] - 2025-03-27\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20231228\u003c/code\u003e to \u003ccode\u003e20250327\u003c/code\u003e (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/3fcb493\"\u003e3fcb493\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/12a73a2\"\u003e12a73a2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse csv.QUOTE_MINIMAL for .to_csv(...) (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/980494a\"\u003e980494a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix bug with \u003ccode\u003euse_text_flow=True\u003c/code\u003e text extraction (h/t \u003ca href=\"https://github.com/samuelbradshaw\"\u003e\u003ccode\u003e@​samuelbradshaw\u003c/code\u003e\u003c/a\u003e)(\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1279\"\u003e#1279\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/e15ed98\"\u003ee15ed98\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCatch exceptions from pdfminer and malformed PDFs (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/43ccc5b\"\u003e43ccc5b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMore broadly handle RecursionError (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/748ff31\"\u003e748ff31\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove test_issue_1089 (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1263\"\u003e#1263\u003c/a\u003e + \u003ca href=\"https://github.com/jsvine/pdfplumber/commit/7e28e76\"\u003e7e28e76\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[0.11.5] - 2025-01-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--format text\u003c/code\u003e options to CLI (in addition to previously-available \u003ccode\u003ecsv\u003c/code\u003e and \u003ccode\u003ejson\u003c/code\u003e) (h/t \u003ca href=\"https://github.com/brandonrobertz\"\u003e\u003ccode\u003e@​brandonrobertz\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/pull/1235\"\u003e#1235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eraise_unicode_errors: bool\u003c/code\u003e parameter to \u003ccode\u003epdfplumber.open()\u003c/code\u003e to allow bypassing \u003ccode\u003eUnicodeDecodeError\u003c/code\u003es in annotation-parsing and generate warnings instead (h/t \u003ca href=\"https://github.com/stolarczyk\"\u003e\u003ccode\u003e@​stolarczyk\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1195\"\u003e#1195\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ename\u003c/code\u003e property to \u003ccode\u003eimage\u003c/code\u003e objects (h/t \u003ca href=\"https://github.com/djr2015\"\u003e\u003ccode\u003e@​djr2015\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/discussions/1201\"\u003e#1201\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003ePageImage.debug_tablefinder(...)\u003c/code\u003e so that its main keyword argument is named the same (\u003ccode\u003etable_settings=\u003c/code\u003e) as other related \u003ccode\u003ePage\u003c/code\u003e methods (h/t \u003ca href=\"https://github.com/n-traore\"\u003e\u003ccode\u003e@​n-traore\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1237\"\u003e#1237\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/jsvine/pdfplumber/commit/db828e3ac08ded001650e6ec66b23e719370d22e\"\u003e\u003ccode\u003edb828e3\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/0aca9f507251ab4c31887b6874896eca269ddb5b\"\u003e\u003ccode\u003e0aca9f5\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/955553292ccfc295020f0d0b661ed3332f57b2bd\"\u003e\u003ccode\u003e9555532\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251229 to 20251230\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/26687c3f87150e85b0fad0e5991bccf0d5a01da5\"\u003e\u003ccode\u003e26687c3\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251228 to 20251229\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/45a3530090d67718eac2a416a4eb8846db70f593\"\u003e\u003ccode\u003e45a3530\u003c/code\u003e\u003c/a\u003e Replace pytest-parallel with pytest-xdist\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/a28150134c80a94202b9b26f2bcc34357f0a4b5b\"\u003e\u003ccode\u003ea281501\u003c/code\u003e\u003c/a\u003e Loosen some requirements-dev.txt versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/6dd1bde2e0596aebf42d7a397410489c2ecc06db\"\u003e\u003ccode\u003e6dd1bde\u003c/code\u003e\u003c/a\u003e Test also on Python 3.13, 3.14, not on 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/3e47d1689df3931c965eb40ed1e1c6c0af76f32e\"\u003e\u003ccode\u003e3e47d16\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1524ce40e7f20e7b3ef311afe49231c603bbdc42\"\u003e\u003ccode\u003e1524ce4\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251227 to 20251228\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/75bbed3950df471c82e0d4540b14c5cd22f005be\"\u003e\u003ccode\u003e75bbed3\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251107 to 20251227\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jsvine/pdfplumber/compare/v0.11.4...v0.11.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.24.9 to 1.27.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package ...\n\n_Description has been truncated_","html_url":"https://github.com/qubo851006-ctrl/reactV3/pull/13","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/qubo851006-ctrl%2FreactV3/issues/13","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/13/packages"}},{"old_version":"1.20.2","new_version":"1.27.2.3","update_type":"minor","path":null,"pr_created_at":"2026-06-01T02:21:21.000Z","version_change":"1.20.2 → 1.27.2.3","issue":{"uuid":"4559867292","node_id":"PR_kwDOSftIMc7hMoyz","number":16,"state":"open","title":"chore(deps)(deps): Bump the python-patch-minor group across 1 directory with 21 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-01T02:21:21.000Z","updated_at":"2026-06-01T02:21:22.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps): Bump","group_name":"python-patch-minor","update_count":21,"packages":[{"name":"ruff","old_version":"0.15.14","new_version":"0.15.15","repository_url":"https://github.com/astral-sh/ruff"},{"name":"coverage","old_version":"7.14.0","new_version":"7.14.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"python-multipart","old_version":"0.0.29","new_version":"0.0.30","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"sqlalchemy","old_version":"2.0.49","new_version":"2.0.50","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"pymupdf","old_version":"1.20.2","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"pypdf","old_version":"6.10.2","new_version":"6.12.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"openai","old_version":"2.32.0","new_version":"2.38.0","repository_url":"https://github.com/openai/openai-python"},{"name":"google-api-python-client","old_version":"2.196.0","new_version":"2.197.0","repository_url":"https://github.com/googleapis/google-api-python-client"},{"name":"grpcio-status","old_version":"1.71.2","new_version":"1.80.0"},{"name":"idna","old_version":"3.16","new_version":"3.17","repository_url":"https://github.com/kjd/idna"},{"name":"mpmath","old_version":"1.3.0","new_version":"1.4.1","repository_url":"https://github.com/mpmath/mpmath"},{"name":"networkx","old_version":"3.4.2","new_version":"3.6.1","repository_url":"https://github.com/networkx/networkx"},{"name":"numpy","old_version":"2.2.6","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"scikit-image","old_version":"0.25.2","new_version":"0.26.0","repository_url":"https://github.com/scikit-image/scikit-image"},{"name":"scipy","old_version":"1.15.3","new_version":"1.17.1","repository_url":"https://github.com/scipy/scipy"},{"name":"starlette","old_version":"1.0.1","new_version":"1.2.1","repository_url":"https://github.com/Kludex/starlette"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-patch-minor group with 21 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.14` | `0.15.15` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.0` | `7.14.1` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.136.3` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.48.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.29` | `0.0.30` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.49` | `2.0.50` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.20.2` | `1.27.2.3` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.10.2` | `6.12.2` |\n| [openai](https://github.com/openai/openai-python) | `2.32.0` | `2.38.0` |\n| [google-api-python-client](https://github.com/googleapis/google-api-python-client) | `2.196.0` | `2.197.0` |\n| [grpcio-status](https://grpc.io) | `1.71.2` | `1.80.0` |\n| [idna](https://github.com/kjd/idna) | `3.16` | `3.17` |\n| [mpmath](https://github.com/mpmath/mpmath) | `1.3.0` | `1.4.1` |\n| [networkx](https://github.com/networkx/networkx) | `3.4.2` | `3.6.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.2.6` | `2.4.6` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.47.0` |\n| [scikit-image](https://github.com/scikit-image/scikit-image) | `0.25.2` | `0.26.0` |\n| [scipy](https://github.com/scipy/scipy) | `1.15.3` | `1.17.1` |\n| [starlette](https://github.com/Kludex/starlette) | `1.0.1` | `1.2.1` |\n\n\nUpdates `ruff` from 0.15.14 to 0.15.15\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.15.15\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-28.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix Markdown closing fence handling (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25310\"\u003e#25310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Report duplicate imports in \u003ccode\u003etyping.TYPE_CHECKING\u003c/code\u003e block (\u003ccode\u003eF811\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22560\"\u003e#22560\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Treat function-scope bare annotations as locals per PEP 526 (\u003ccode\u003eF821\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/21540\"\u003e#21540\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant \u003ccode\u003eTokenValue\u003c/code\u003e drops in the lexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25300\"\u003e#25300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce memory usage by dropping token-excess capacity and improve performance by approximating the initial tokens \u003ccode\u003eVec\u003c/code\u003e size (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25354\"\u003e#25354\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eThinVec\u003c/code\u003e in AST to shrink \u003ccode\u003eStmt\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25361\"\u003e#25361\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eline-length\u003c/code\u003e example for \u003ccode\u003e--config\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25389\"\u003e#25389\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Document \u003ccode\u003eRecursionError\u003c/code\u003e edge case in \u003ccode\u003e__len__\u003c/code\u003e (\u003ccode\u003eC416\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25286\"\u003e#25286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003emccabe\u003c/code\u003e] Improve example (\u003ccode\u003eC901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25287\"\u003e#25287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Clarify fix safety docs (\u003ccode\u003eUP007\u003c/code\u003e, \u003ccode\u003eUP045\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25288\"\u003e#25288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Document \u003ccode\u003eFURB192\u003c/code\u003e exception change for empty sequences (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25317\"\u003e#25317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Document false negative for user-defined types (\u003ccode\u003eRUF013\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25289\"\u003e#25289\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix formatting of lambdas nested within f-strings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25398\"\u003e#25398\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReturn code action for \u003ccode\u003ecodeAction/resolve\u003c/code\u003e requests that contain no or no valid URL (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25365\"\u003e#25365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExpand semantic syntax errors for invalid walruses (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25415\"\u003e#25415\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/chirizxc\"\u003e\u003ccode\u003e@​chirizxc\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/adityasingh2400\"\u003e\u003ccode\u003e@​adityasingh2400\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/fallintoplace\"\u003e\u003ccode\u003e@​fallintoplace\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martin-schlossarek\"\u003e\u003ccode\u003e@​martin-schlossarek\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\u003c/ul\u003e\n\u003c!-- 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.15.15\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-28.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix Markdown closing fence handling (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25310\"\u003e#25310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Report duplicate imports in \u003ccode\u003etyping.TYPE_CHECKING\u003c/code\u003e block (\u003ccode\u003eF811\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22560\"\u003e#22560\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epyflakes\u003c/code\u003e] Treat function-scope bare annotations as locals per PEP 526 (\u003ccode\u003eF821\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/21540\"\u003e#21540\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant \u003ccode\u003eTokenValue\u003c/code\u003e drops in the lexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25300\"\u003e#25300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce memory usage by dropping token-excess capacity and improve performance by approximating the initial tokens \u003ccode\u003eVec\u003c/code\u003e size (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25354\"\u003e#25354\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eThinVec\u003c/code\u003e in AST to shrink \u003ccode\u003eStmt\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25361\"\u003e#25361\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eline-length\u003c/code\u003e example for \u003ccode\u003e--config\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25389\"\u003e#25389\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Document \u003ccode\u003eRecursionError\u003c/code\u003e edge case in \u003ccode\u003e__len__\u003c/code\u003e (\u003ccode\u003eC416\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25286\"\u003e#25286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003emccabe\u003c/code\u003e] Improve example (\u003ccode\u003eC901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25287\"\u003e#25287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Clarify fix safety docs (\u003ccode\u003eUP007\u003c/code\u003e, \u003ccode\u003eUP045\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25288\"\u003e#25288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Document \u003ccode\u003eFURB192\u003c/code\u003e exception change for empty sequences (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25317\"\u003e#25317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Document false negative for user-defined types (\u003ccode\u003eRUF013\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25289\"\u003e#25289\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix formatting of lambdas nested within f-strings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25398\"\u003e#25398\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReturn code action for \u003ccode\u003ecodeAction/resolve\u003c/code\u003e requests that contain no or no valid URL (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25365\"\u003e#25365\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExpand semantic syntax errors for invalid walruses (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25415\"\u003e#25415\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/chirizxc\"\u003e\u003ccode\u003e@​chirizxc\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/adityasingh2400\"\u003e\u003ccode\u003e@​adityasingh2400\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/fallintoplace\"\u003e\u003ccode\u003e@​fallintoplace\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martin-schlossarek\"\u003e\u003ccode\u003e@​martin-schlossarek\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/Ruchir28\"\u003e\u003ccode\u003e@​Ruchir28\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/astral-sh/ruff/commit/db5aa0a5f1b92cb91d910bf0866a967554dd94f5\"\u003e\u003ccode\u003edb5aa0a\u003c/code\u003e\u003c/a\u003e Bump 0.15.15 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25431\"\u003e#25431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/366fe21ba369ccdd01eb99c1043c9a969c99230b\"\u003e\u003ccode\u003e366fe21\u003c/code\u003e\u003c/a\u003e [ty] Improve diagnostics for syntax errors in forward annotations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25158\"\u003e#25158\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e2e1e647d182b8567845039c9a65fb0608a4dcfc\"\u003e\u003ccode\u003ee2e1e64\u003c/code\u003e\u003c/a\u003e [ty] Remove excess capacity from more Salsa cached collections (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25411\"\u003e#25411\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1bd77e1646f2213d86b8da215f08279187867d72\"\u003e\u003ccode\u003e1bd77e1\u003c/code\u003e\u003c/a\u003e [ty] Use diagnostic message as tie breaker when sorting (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25424\"\u003e#25424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7e1bc1e75f15795f12c846294b13df4535f2abbf\"\u003e\u003ccode\u003e7e1bc1e\u003c/code\u003e\u003c/a\u003e Add agent skills for working on ty (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25422\"\u003e#25422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/574e10752f8cfa9e0cdbe3b01e96c4380950469b\"\u003e\u003ccode\u003e574e107\u003c/code\u003e\u003c/a\u003e Expand semantic syntax errors for invalid walruses (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25415\"\u003e#25415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4a7ca062fccd80443a43aa61e5dc7e5858e88dc1\"\u003e\u003ccode\u003e4a7ca06\u003c/code\u003e\u003c/a\u003e [ty] Display docs for matching parameter when hovering over the name of an ar...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54327092dbfe455040690d63bb1e5e4b5f551239\"\u003e\u003ccode\u003e5432709\u003c/code\u003e\u003c/a\u003e Refine a few agents instructions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25423\"\u003e#25423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3cb09eba689ebb49e799131092121928cc789c18\"\u003e\u003ccode\u003e3cb09eb\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003etyping.TypeForm\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25334\"\u003e#25334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c8cd59f189f2b6f55d542b29bddb953622add6fc\"\u003e\u003ccode\u003ec8cd59f\u003c/code\u003e\u003c/a\u003e [ty] Infer class attributes assigned by metaclass initialization (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25342\"\u003e#25342\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.14...0.15.15\"\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.0 to 7.14.1\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.14.1 — 2026-05-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the HTML report used typographic niceties to make file paths more\nreadable by adding a small amount of space around slashes. Those spaces\ninterfered with searching the page for file paths of interest. Now the report\nuses CSS to accomplish the same visual tweak so that searches with slashes\nwork correctly. Closes \u003ccode\u003eissue 2170\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAdd a 3.16 PyPI classifier \u0026lt;hugo-316_\u0026gt;\u003c/code\u003e_ since we test on the 3.16 main\nbranch.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2170: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2170\"\u003ecoveragepy/coveragepy#2170\u003c/a\u003e\n.. _hugo-316: \u003ca href=\"https://mastodon.social/@hugovk/116588523571204490\"\u003ehttps://mastodon.social/@​hugovk/116588523571204490\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-14-0:\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/64d9b66fd852c1920ffe6cb8b58d7e4fdae90226\"\u003e\u003ccode\u003e64d9b66\u003c/code\u003e\u003c/a\u003e docs: correct the date for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/6fa7dd44c25e1a660252faaf030dd8f2f1e20861\"\u003e\u003ccode\u003e6fa7dd4\u003c/code\u003e\u003c/a\u003e chore: bump actions/dependency-review-action (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2181\"\u003e#2181\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/078afae263597b004eb9a85d880b6a65008e75ed\"\u003e\u003ccode\u003e078afae\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/cb4f028a36e008b664739d04f387b90ee5105044\"\u003e\u003ccode\u003ecb4f028\u003c/code\u003e\u003c/a\u003e docs: prep for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ae2d09f562271c6169534e1c242d015dd0823dda\"\u003e\u003ccode\u003eae2d09f\u003c/code\u003e\u003c/a\u003e Merge branch 'nedbat/classifire-316-kits'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/2c3568b2e041f2c0dbbc8eaa3919d46ee891b743\"\u003e\u003ccode\u003e2c3568b\u003c/code\u003e\u003c/a\u003e build: declare 3.16 compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/faa68f8601cf098701b68976dbb73b9fc23c9297\"\u003e\u003ccode\u003efaa68f8\u003c/code\u003e\u003c/a\u003e chore: bump github/codeql-action in the action-dependencies group (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2173\"\u003e#2173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/eb55feedf54b363e3d0b678f20abf3bfd3551a88\"\u003e\u003ccode\u003eeb55fee\u003c/code\u003e\u003c/a\u003e test: we don't need PyPy \u0026lt; 7.3.22 anymore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ac168fe53c04cdb2ff5231c0c4e5045021ee339b\"\u003e\u003ccode\u003eac168fe\u003c/code\u003e\u003c/a\u003e test: the text summary should show missing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/fed4bd2db3c1cb2916a07791041da693fbf8e996\"\u003e\u003ccode\u003efed4bd2\u003c/code\u003e\u003c/a\u003e chore: upgrade virtualenv\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.0...7.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi` from 0.136.1 to 0.136.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🍱 Update sponsors: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Fix image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✏️ Fix Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15530\"\u003e#15530\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15529\"\u003e#15529\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15528\"\u003e#15528\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15525\"\u003e#15525\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15524\"\u003e#15524\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15522\"\u003e#15522\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15523\"\u003e#15523\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15520\"\u003e#15520\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15521\"\u003e#15521\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\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/fastapi/fastapi/commit/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.47.0 to 0.48.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults 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/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\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.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.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/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\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/73e84e58d7f6b8b3dfd8a9e3e42d716862250f33\"\u003e\u003ccode\u003e73e84e5\u003c/code\u003e\u003c/a\u003e Version 0.48.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45ea11690b4a62fa6df339d2b6ee3b8545a418e0\"\u003e\u003ccode\u003e45ea116\u003c/code\u003e\u003c/a\u003e Ignore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/dd4394c3cbfd9f27a696a7b08047149690058158\"\u003e\u003ccode\u003edd4394c\u003c/code\u003e\u003c/a\u003e chore(deps): bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2941\"\u003e#2941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/abe07818a191cd036dc3824d802d052207e01c7e\"\u003e\u003ccode\u003eabe0781\u003c/code\u003e\u003c/a\u003e Default \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.29 to 0.0.30\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.30\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTreat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator 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/python-multipart/pull/290\"\u003eKludex/python-multipart#290\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003eKludex/python-multipart#291\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/python-multipart/compare/0.0.29...0.0.30\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.30 (2026-05-31)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eParse \u003ccode\u003eapplication/x-www-form-urlencoded\u003c/code\u003e bodies per the WHATWG URL standard, treating only \u003ccode\u003e\u0026amp;\u003c/code\u003e as a field separator \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/290\"\u003e#290\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231/5987 extended parameters (\u003ccode\u003ename*\u003c/code\u003e, \u003ccode\u003efilename*\u003c/code\u003e) in \u003ccode\u003eparse_options_header\u003c/code\u003e, keeping the plain parameter authoritative per \u003ca href=\"https://datatracker.ietf.org/doc/html/rfc7578#section-4.2\"\u003eRFC 7578 §4.2\u003c/a\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003e#291\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/python-multipart/commit/9d3ead568a259f222cff6425262ff63e88d930d4\"\u003e\u003ccode\u003e9d3ead5\u003c/code\u003e\u003c/a\u003e Version 0.0.30 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/292\"\u003e#292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/3506c15ce99cb62faf2d5ceb3c4c1e5800cb843d\"\u003e\u003ccode\u003e3506c15\u003c/code\u003e\u003c/a\u003e Ignore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/291\"\u003e#291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/d69df35cd2cad9c72794c2c340db646afae957d8\"\u003e\u003ccode\u003ed69df35\u003c/code\u003e\u003c/a\u003e Treat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/1e6ff9740b09fb439755f30e2b0e2ada1d297325\"\u003e\u003ccode\u003e1e6ff97\u003c/code\u003e\u003c/a\u003e Bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/289\"\u003e#289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.49 to 2.0.50\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.50\u003c/h1\u003e\n\u003cp\u003eReleased: May 24, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where using \u003ccode\u003e_orm.joinedload()\u003c/code\u003e with\n\u003ccode\u003ePropComparator.of_type()\u003c/code\u003e targeting a joined-table subclass combined\nwith \u003ccode\u003ePropComparator.and_()\u003c/code\u003e referencing a column on that subclass\nwould generate invalid SQL, where the subclass column was not adapted to\nthe subquery alias.  Pull request courtesy Joaquin Hui Gomez.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13203\"\u003e#13203\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where the presence of a \u003ccode\u003eSessionEvents.do_orm_execute()\u003c/code\u003e\nevent hook would cause internal execution options such as \u003ccode\u003eyield_per\u003c/code\u003e and\nloader-specific state from the first \u003ccode\u003eorm_pre_session_exec\u003c/code\u003e pass to leak\ninto the second pass, leading to errors when using relationship loaders\nsuch as \u003ccode\u003eselectinload()\u003c/code\u003e and \u003ccode\u003eimmediateload()\u003c/code\u003e.  The execution\noptions passed to the second compilation pass are now based on the original\noptions plus only the explicit updates made via\n\u003ccode\u003eORMExecuteState.update_execution_options()\u003c/code\u003e within the event hook.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13301\"\u003e#13301\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where using \u003ccode\u003e_orm.with_polymorphic()\u003c/code\u003e on a leaf class (a\nsubclass with no further descendants) or a non-inherited class would fail\nwith an \u003ccode\u003eAttributeError\u003c/code\u003e when used in an ORM statement, due to\n\u003ccode\u003e_orm.configure_mappers()\u003c/code\u003e not being triggered implicitly. The fix\nensures that \u003ccode\u003eAliasedInsp\u003c/code\u003e participates in the \u003ccode\u003e_post_inspect\u003c/code\u003e\nhook, triggering mapper configuration during ORM statement compilation.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13319\"\u003e#13319\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003esql\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[sql] [bug]\u003c/strong\u003e Fixed issue where floor division (\u003ccode\u003e//\u003c/code\u003e) between a \u003ccode\u003eFloat\u003c/code\u003e or\n\u003ccode\u003eNumeric\u003c/code\u003e numerator and an \u003ccode\u003eInteger\u003c/code\u003e denominator would omit\nthe \u003ccode\u003eFLOOR()\u003c/code\u003e SQL wrapper on dialects where\n\u003ccode\u003eDialect.div_is_floordiv\u003c/code\u003e is \u003ccode\u003eTrue\u003c/code\u003e (the default, including\nPostgreSQL and SQLite).  \u003ccode\u003eFLOOR()\u003c/code\u003e is now applied if either the\ndenominator or the numerator is a non-integer, so that expressions such as\n\u003ccode\u003efloat_col // int_col\u003c/code\u003e render as \u003ccode\u003eFLOOR(float_col / int_col)\u003c/code\u003e instead\nof the incorrect \u003ccode\u003efloat_col / int_col\u003c/code\u003e.  Pull request courtesy r266-tech.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/10528\"\u003e#10528\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epostgresql\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\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.2 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.1 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.1...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.20.2 to 1.27.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.20.2...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdf` from 6.10.2 to 6.12.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/releases\"\u003epypdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.12.2, 2026-05-26\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOptimize _decode_png_prediction regarding memory and speed (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3806\"\u003e#3806\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove loop control in text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3805\"\u003e#3805\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.12.1...6.12.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.12.1, 2026-05-22\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit input size and element count for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3796\"\u003e#3796\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent cyclic parent hierarchies for inherited dictionaries (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3795\"\u003e#3795\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeal with invalid first code in LZW decoder (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3794\"\u003e#3794\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.12.0...6.12.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.12.0, 2026-05-21\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDisallow cross-reference streams with zero-only width values (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3791\"\u003e#3791\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid excessive whitespace in layout mode text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3790\"\u003e#3790\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement SASLprep (RFC 4013) for AES-256 password normalization (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3780\"\u003e#3780\u003c/a\u003e) by \u003ca href=\"https://github.com/adityamoolya\"\u003e\u003ccode\u003e@​adityamoolya\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCID font resource from font file to encode more characters (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3652\"\u003e#3652\u003c/a\u003e) by \u003ca href=\"https://github.com/PJBrs\"\u003e\u003ccode\u003e@​PJBrs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements (PI)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOptimize retrieval of named destinatinos in reader (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3442\"\u003e#3442\u003c/a\u003e) by \u003ca href=\"https://github.com/larsga\"\u003e\u003ccode\u003e@​larsga\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes (BUG)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix TreeObject.insert_child KeyError on fresh children (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3786\"\u003e#3786\u003c/a\u003e) by \u003ca href=\"https://github.com/Abzaek\"\u003e\u003ccode\u003e@​Abzaek\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAppearanceStream: Also honor user-set font name when not flattening annotations (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3781\"\u003e#3781\u003c/a\u003e) by \u003ca href=\"https://github.com/PJBrs\"\u003e\u003ccode\u003e@​PJBrs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation (DOC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBlock encrypting writer in incremental mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3789\"\u003e#3789\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.11.0...6.12.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.11.0, 2026-05-09\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eNew Features (ENH)\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/py-pdf/pypdf/blob/main/CHANGELOG.md\"\u003epypdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.12.2, 2026-05-26\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOptimize _decode_png_prediction regarding memory and speed (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3806\"\u003e#3806\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove loop control in text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3805\"\u003e#3805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.12.1...6.12.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.12.1, 2026-05-22\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit input size and element count for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3796\"\u003e#3796\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent cyclic parent hierarchies for inherited dictionaries (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3795\"\u003e#3795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeal with invalid first code in LZW decoder (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3794\"\u003e#3794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.12.0...6.12.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.12.0, 2026-05-21\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDisallow cross-reference streams with zero-only width values (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3791\"\u003e#3791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid excessive whitespace in layout mode text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3790\"\u003e#3790\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement SASLprep (RFC 4013) for AES-256 password normalization (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3780\"\u003e#3780\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCID font resource from font file to encode more characters (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3652\"\u003e#3652\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements (PI)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOptimize retrieval of named destinatinos in reader (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3442\"\u003e#3442\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes (BUG)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix TreeObject.insert_child KeyError on fresh children (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3786\"\u003e#3786\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAppearanceStream: Also honor user-set font name when not flattening annotations (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3781\"\u003e#3781\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation (DOC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBlock encrypting writer in incremental mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3789\"\u003e#3789\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.11.0...6.12.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.11.0, 2026-05-09\u003c/h2\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInitialise a Font from an embedded font file (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3704\"\u003e#3704\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow to fix AES padding length in non-strict mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3742\"\u003e#3742\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/py-pdf/pypdf/commit/efad421b12fe47b269593ffca8e79a71c7aae065\"\u003e\u003ccode\u003eefad421\u003c/code\u003e\u003c/a\u003e REL: 6.12.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/6755d925fae26a79c2f76f5c911bcd728f75a952\"\u003e\u003ccode\u003e6755d92\u003c/code\u003e\u003c/a\u003e SEC: Optimize _decode_png_prediction regarding memory and speed (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3806\"\u003e#3806\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/0b5b8adf02a25b23adae9037ff32d16232936c0f\"\u003e\u003ccode\u003e0b5b8ad\u003c/code\u003e\u003c/a\u003e SEC: Improve loop control in text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3805\"\u003e#3805\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/1a7454f63964946e705407662017cc8bddf91df8\"\u003e\u003ccode\u003e1a7454f\u003c/code\u003e\u003c/a\u003e MAINT: Remove unneeded backslash in re.compile (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3797\"\u003e#3797\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/228780a5c759feae0ed1c2741ad36ba86e0e1475\"\u003e\u003ccode\u003e228780a\u003c/code\u003e\u003c/a\u003e REL: 6.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/62191d5a5c3ee218856d3cbaa039366bc97909f7\"\u003e\u003ccode\u003e62191d5\u003c/code\u003e\u003c/a\u003e SEC: Limit input size and element count for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3796\"\u003e#3796\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/e85263124757d277ed463d737fe830920ba7f1ea\"\u003e\u003ccode\u003ee852631\u003c/code\u003e\u003c/a\u003e ROB: Prevent cyclic parent hierarchies for inherited dictionaries (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3795\"\u003e#3795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/6b4bbcc43e6c357b381751f0aa09fcbd5825cd63\"\u003e\u003ccode\u003e6b4bbcc\u003c/code\u003e\u003c/a\u003e ROB: Deal with invalid first code in LZW decoder (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3794\"\u003e#3794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/20c16d372521cf8485756ad1e4d95021b9c94f79\"\u003e\u003ccode\u003e20c16d3\u003c/code\u003e\u003c/a\u003e TST: Update tests for Python 3.15 support (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3793\"\u003e#3793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-...\n\n_Description has been truncated_","html_url":"https://github.com/skin306152-star/pearnly-app/pull/16","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/skin306152-star%2Fpearnly-app/issues/16","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/16/packages"}},{"old_version":"\u003e=1.23.0","new_version":"\u003e=1.27.2.3","update_type":"minor","path":null,"pr_created_at":"2026-05-30T07:18:49.000Z","version_change":"\u003e=1.23.0 → \u003e=1.27.2.3","issue":{"uuid":"4553680186","node_id":"PR_kwDOSsB6Gs7g6Mhp","number":6,"state":"open","title":"chore(deps): update pymupdf requirement from \u003e=1.23.0 to \u003e=1.27.2.3","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-30T07:18:49.000Z","updated_at":"2026-05-30T07:18:50.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"pymupdf","old_version":"\u003e=1.23.0","new_version":"\u003e=1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.23.0...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/ldkong2077/contract-comparator/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ldkong2077%2Fcontract-comparator/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}},{"old_version":"1.20.2","new_version":"1.27.2.3","update_type":"minor","path":null,"pr_created_at":"2026-05-25T01:36:25.000Z","version_change":"1.20.2 → 1.27.2.3","issue":{"uuid":"4513676958","node_id":"PR_kwDOSftIMc7e4DRw","number":14,"state":"closed","title":"chore(deps)(deps): bump the python-patch-minor group across 1 directory with 16 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-01T02:19:23.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-25T01:36:25.000Z","updated_at":"2026-06-01T02:19:24.000Z","time_to_close":607378,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps): bump","group_name":"python-patch-minor","update_count":16,"packages":[{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"sqlalchemy","old_version":"2.0.49","new_version":"2.0.50","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"pymupdf","old_version":"1.20.2","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"pypdf","old_version":"6.10.2","new_version":"6.12.1","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"openai","old_version":"2.32.0","new_version":"2.38.0","repository_url":"https://github.com/openai/openai-python"},{"name":"grpcio-status","old_version":"1.71.2","new_version":"1.80.0"},{"name":"mpmath","old_version":"1.3.0","new_version":"1.4.1","repository_url":"https://github.com/mpmath/mpmath"},{"name":"networkx","old_version":"3.4.2","new_version":"3.6.1","repository_url":"https://github.com/networkx/networkx"},{"name":"numpy","old_version":"2.2.6","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"scikit-image","old_version":"0.25.2","new_version":"0.26.0","repository_url":"https://github.com/scikit-image/scikit-image"},{"name":"scipy","old_version":"1.15.3","new_version":"1.17.1","repository_url":"https://github.com/scipy/scipy"},{"name":"starlette","old_version":"1.0.1","new_version":"1.1.0","repository_url":"https://github.com/Kludex/starlette"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-patch-minor group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.136.3` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.48.0` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.49` | `2.0.50` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.20.2` | `1.27.2.3` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.10.2` | `6.12.1` |\n| [openai](https://github.com/openai/openai-python) | `2.32.0` | `2.38.0` |\n| [grpcio-status](https://grpc.io) | `1.71.2` | `1.80.0` |\n| [mpmath](https://github.com/mpmath/mpmath) | `1.3.0` | `1.4.1` |\n| [networkx](https://github.com/networkx/networkx) | `3.4.2` | `3.6.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.2.6` | `2.4.6` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.47.0` |\n| [scikit-image](https://github.com/scikit-image/scikit-image) | `0.25.2` | `0.26.0` |\n| [scipy](https://github.com/scipy/scipy) | `1.15.3` | `1.17.1` |\n| [starlette](https://github.com/Kludex/starlette) | `1.0.1` | `1.1.0` |\n\n\nUpdates `fastapi` from 0.136.1 to 0.136.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🍱 Update sponsors: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Fix image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✏️ Fix Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15530\"\u003e#15530\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15529\"\u003e#15529\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15528\"\u003e#15528\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15525\"\u003e#15525\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15524\"\u003e#15524\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15522\"\u003e#15522\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15523\"\u003e#15523\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15520\"\u003e#15520\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15521\"\u003e#15521\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\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/fastapi/fastapi/commit/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.47.0 to 0.48.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults 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/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\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.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.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/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\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/73e84e58d7f6b8b3dfd8a9e3e42d716862250f33\"\u003e\u003ccode\u003e73e84e5\u003c/code\u003e\u003c/a\u003e Version 0.48.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45ea11690b4a62fa6df339d2b6ee3b8545a418e0\"\u003e\u003ccode\u003e45ea116\u003c/code\u003e\u003c/a\u003e Ignore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/dd4394c3cbfd9f27a696a7b08047149690058158\"\u003e\u003ccode\u003edd4394c\u003c/code\u003e\u003c/a\u003e chore(deps): bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2941\"\u003e#2941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/abe07818a191cd036dc3824d802d052207e01c7e\"\u003e\u003ccode\u003eabe0781\u003c/code\u003e\u003c/a\u003e Default \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.49 to 2.0.50\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.50\u003c/h1\u003e\n\u003cp\u003eReleased: May 24, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where using \u003ccode\u003e_orm.joinedload()\u003c/code\u003e with\n\u003ccode\u003ePropComparator.of_type()\u003c/code\u003e targeting a joined-table subclass combined\nwith \u003ccode\u003ePropComparator.and_()\u003c/code\u003e referencing a column on that subclass\nwould generate invalid SQL, where the subclass column was not adapted to\nthe subquery alias.  Pull request courtesy Joaquin Hui Gomez.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13203\"\u003e#13203\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where the presence of a \u003ccode\u003eSessionEvents.do_orm_execute()\u003c/code\u003e\nevent hook would cause internal execution options such as \u003ccode\u003eyield_per\u003c/code\u003e and\nloader-specific state from the first \u003ccode\u003eorm_pre_session_exec\u003c/code\u003e pass to leak\ninto the second pass, leading to errors when using relationship loaders\nsuch as \u003ccode\u003eselectinload()\u003c/code\u003e and \u003ccode\u003eimmediateload()\u003c/code\u003e.  The execution\noptions passed to the second compilation pass are now based on the original\noptions plus only the explicit updates made via\n\u003ccode\u003eORMExecuteState.update_execution_options()\u003c/code\u003e within the event hook.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13301\"\u003e#13301\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where using \u003ccode\u003e_orm.with_polymorphic()\u003c/code\u003e on a leaf class (a\nsubclass with no further descendants) or a non-inherited class would fail\nwith an \u003ccode\u003eAttributeError\u003c/code\u003e when used in an ORM statement, due to\n\u003ccode\u003e_orm.configure_mappers()\u003c/code\u003e not being triggered implicitly. The fix\nensures that \u003ccode\u003eAliasedInsp\u003c/code\u003e participates in the \u003ccode\u003e_post_inspect\u003c/code\u003e\nhook, triggering mapper configuration during ORM statement compilation.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13319\"\u003e#13319\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003esql\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[sql] [bug]\u003c/strong\u003e Fixed issue where floor division (\u003ccode\u003e//\u003c/code\u003e) between a \u003ccode\u003eFloat\u003c/code\u003e or\n\u003ccode\u003eNumeric\u003c/code\u003e numerator and an \u003ccode\u003eInteger\u003c/code\u003e denominator would omit\nthe \u003ccode\u003eFLOOR()\u003c/code\u003e SQL wrapper on dialects where\n\u003ccode\u003eDialect.div_is_floordiv\u003c/code\u003e is \u003ccode\u003eTrue\u003c/code\u003e (the default, including\nPostgreSQL and SQLite).  \u003ccode\u003eFLOOR()\u003c/code\u003e is now applied if either the\ndenominator or the numerator is a non-integer, so that expressions such as\n\u003ccode\u003efloat_col // int_col\u003c/code\u003e render as \u003ccode\u003eFLOOR(float_col / int_col)\u003c/code\u003e instead\nof the incorrect \u003ccode\u003efloat_col / int_col\u003c/code\u003e.  Pull request courtesy r266-tech.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/10528\"\u003e#10528\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003epostgresql\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\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.2 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.1 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.1...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.20.2 to 1.27.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.20.2...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdf` from 6.10.2 to 6.12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/releases\"\u003epypdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.12.1, 2026-05-22\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit input size and element count for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3796\"\u003e#3796\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent cyclic parent hierarchies for inherited dictionaries (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3795\"\u003e#3795\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeal with invalid first code in LZW decoder (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3794\"\u003e#3794\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.12.0...6.12.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.12.0, 2026-05-21\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDisallow cross-reference streams with zero-only width values (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3791\"\u003e#3791\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid excessive whitespace in layout mode text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3790\"\u003e#3790\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement SASLprep (RFC 4013) for AES-256 password normalization (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3780\"\u003e#3780\u003c/a\u003e) by \u003ca href=\"https://github.com/adityamoolya\"\u003e\u003ccode\u003e@​adityamoolya\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCID font resource from font file to encode more characters (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3652\"\u003e#3652\u003c/a\u003e) by \u003ca href=\"https://github.com/PJBrs\"\u003e\u003ccode\u003e@​PJBrs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements (PI)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOptimize retrieval of named destinatinos in reader (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3442\"\u003e#3442\u003c/a\u003e) by \u003ca href=\"https://github.com/larsga\"\u003e\u003ccode\u003e@​larsga\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes (BUG)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix TreeObject.insert_child KeyError on fresh children (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3786\"\u003e#3786\u003c/a\u003e) by \u003ca href=\"https://github.com/Abzaek\"\u003e\u003ccode\u003e@​Abzaek\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAppearanceStream: Also honor user-set font name when not flattening annotations (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3781\"\u003e#3781\u003c/a\u003e) by \u003ca href=\"https://github.com/PJBrs\"\u003e\u003ccode\u003e@​PJBrs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation (DOC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBlock encrypting writer in incremental mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3789\"\u003e#3789\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.11.0...6.12.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.11.0, 2026-05-09\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInitialise a Font from an embedded font file (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3704\"\u003e#3704\u003c/a\u003e) by \u003ca href=\"https://github.com/PJBrs\"\u003e\u003ccode\u003e@​PJBrs\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow to fix AES padding length in non-strict mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3742\"\u003e#3742\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeveloper Experience (DEV)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnable PyPy testing again (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3752\"\u003e#3752\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlign mypy Makefile target with strict mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3690\"\u003e#3690\u003c/a\u003e) by \u003ca href=\"https://github.com/costajohnt\"\u003e\u003ccode\u003e@​costajohnt\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/py-pdf/pypdf/blob/main/CHANGELOG.md\"\u003epypdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.12.1, 2026-05-22\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit input size and element count for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3796\"\u003e#3796\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent cyclic parent hierarchies for inherited dictionaries (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3795\"\u003e#3795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDeal with invalid first code in LZW decoder (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3794\"\u003e#3794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.12.0...6.12.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.12.0, 2026-05-21\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDisallow cross-reference streams with zero-only width values (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3791\"\u003e#3791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid excessive whitespace in layout mode text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3790\"\u003e#3790\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement SASLprep (RFC 4013) for AES-256 password normalization (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3780\"\u003e#3780\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCID font resource from font file to encode more characters (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3652\"\u003e#3652\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements (PI)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOptimize retrieval of named destinatinos in reader (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3442\"\u003e#3442\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes (BUG)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix TreeObject.insert_child KeyError on fresh children (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3786\"\u003e#3786\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAppearanceStream: Also honor user-set font name when not flattening annotations (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3781\"\u003e#3781\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation (DOC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBlock encrypting writer in incremental mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3789\"\u003e#3789\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.11.0...6.12.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.11.0, 2026-05-09\u003c/h2\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInitialise a Font from an embedded font file (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3704\"\u003e#3704\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow to fix AES padding length in non-strict mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3742\"\u003e#3742\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeveloper Experience (DEV)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnable PyPy testing again (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3752\"\u003e#3752\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAlign mypy Makefile target with strict mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3690\"\u003e#3690\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.10.2...6.11.0\"\u003eFull Changelog\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/py-pdf/pypdf/commit/228780a5c759feae0ed1c2741ad36ba86e0e1475\"\u003e\u003ccode\u003e228780a\u003c/code\u003e\u003c/a\u003e REL: 6.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/62191d5a5c3ee218856d3cbaa039366bc97909f7\"\u003e\u003ccode\u003e62191d5\u003c/code\u003e\u003c/a\u003e SEC: Limit input size and element count for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3796\"\u003e#3796\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/e85263124757d277ed463d737fe830920ba7f1ea\"\u003e\u003ccode\u003ee852631\u003c/code\u003e\u003c/a\u003e ROB: Prevent cyclic parent hierarchies for inherited dictionaries (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3795\"\u003e#3795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/6b4bbcc43e6c357b381751f0aa09fcbd5825cd63\"\u003e\u003ccode\u003e6b4bbcc\u003c/code\u003e\u003c/a\u003e ROB: Deal with invalid first code in LZW decoder (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3794\"\u003e#3794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/20c16d372521cf8485756ad1e4d95021b9c94f79\"\u003e\u003ccode\u003e20c16d3\u003c/code\u003e\u003c/a\u003e TST: Update tests for Python 3.15 support (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3793\"\u003e#3793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/08eb1435ef2e4d1e3d5fe90636c3cee7aa6f4470\"\u003e\u003ccode\u003e08eb143\u003c/code\u003e\u003c/a\u003e REL: 6.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/507d7c9aa6ea83389b954b9c3c0c528fe5d5da70\"\u003e\u003ccode\u003e507d7c9\u003c/code\u003e\u003c/a\u003e SEC: Disallow cross-reference streams with zero-only width values (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3791\"\u003e#3791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/9d2747057c4afc06ccc0fc6244a3915ba6ea6f0b\"\u003e\u003ccode\u003e9d27470\u003c/code\u003e\u003c/a\u003e SEC: Avoid excessive whitespace in layout mode text extraction (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3790\"\u003e#3790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/0a8e699d33ff1d82fae17b7cfa6d01b822be50b2\"\u003e\u003ccode\u003e0a8e699\u003c/code\u003e\u003c/a\u003e DOC: Block encrypting writer in incremental mode (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3789\"\u003e#3789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/541ebd4e6e0c23dd90f5723210b585655d2a9519\"\u003e\u003ccode\u003e541ebd4\u003c/code\u003e\u003c/a\u003e DEV: Update idna from version 3.10 to 3.15\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.10.2...6.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.32.0 to 2.38.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.38.0\u003c/h2\u003e\n\u003ch2\u003e2.38.0 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.37.0...v2.38.0\"\u003ev2.37.0...v2.38.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e api update (\u003ca href=\"https://github.com/openai/openai-python/commit/33d1d013250053886a73d178136e6bd1b09df059\"\u003e33d1d01\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/a21700a2cd510cb9e6c88065ac8e942d4c041aa8\"\u003ea21700a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update OpenAPI spec or Stainless config (\u003ca href=\"https://github.com/openai/openai-python/commit/00265c5daba4d2481452ad35220f1556dab6bcf6\"\u003e00265c5\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e docs updates (\u003ca href=\"https://github.com/openai/openai-python/commit/ee101520d49e22c09cf8096f8cbb3848ea58a1f9\"\u003eee10152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echeck release PR custom code sync (\u003ca href=\"https://github.com/openai/openai-python/commit/2638779a5b8fffaa8fdb6eebc1d734f15d2491f8\"\u003e2638779\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremove release automation trigger (\u003ca href=\"https://github.com/openai/openai-python/commit/bd6eea559f2996d914258a65e645981bdce3cad4\"\u003ebd6eea5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etrigger release automation (\u003ca href=\"https://github.com/openai/openai-python/commit/f62d08201eea8e08d4bb3385662f934d4adccb29\"\u003ef62d082\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.37.0\u003c/h2\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.36.0\u003c/h2\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.35.1\u003c/h2\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.38.0 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.37.0...v2.38.0\"\u003ev2.37.0...v2.38.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e api update (\u003ca href=\"https://github.com/openai/openai-python/commit/33d1d013250053886a73d178136e6bd1b09df059\"\u003e33d1d01\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/a21700a2cd510cb9e6c88065ac8e942d4c041aa8\"\u003ea21700a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update OpenAPI spec or Stainless config (\u003ca href=\"https://github.com/openai/openai-python/commit/00265c5daba4d2481452ad35220f1556dab6bcf6\"\u003e00265c5\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e docs updates (\u003ca href=\"https://github.com/openai/openai-python/commit/ee101520d49e22c09cf8096f8cbb3848ea58a1f9\"\u003eee10152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echeck release PR custom code sync (\u003ca href=\"https://github.com/openai/openai-python/commit/2638779a5b8fffaa8fdb6eebc1d734f15d2491f8\"\u003e2638779\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremove release automation trigger (\u003ca href=\"https://github.com/openai/openai-python/commit/bd6eea559f2996d914258a65e645981bdce3cad4\"\u003ebd6eea5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etrigger release automation (\u003ca href=\"https://github.com/openai/openai-python/commit/f62d08201eea8e08d4bb3385662f934d4adccb29\"\u003ef62d082\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.37.0 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.36.0...v2.37.0\"\u003ev2.36.0...v2.37.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add service_tier parameter to responses compact method (\u003ca href=\"https://github.com/openai/openai-python/commit/625827c5509ece3c40e5002be37a9bd9d91b5374\"\u003e625827c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal/types:\u003c/strong\u003e support eagerly validating pydantic iterators (\u003ca href=\"https://github.com/openai/openai-python/commit/7e527bc927cc58b74d7619abf7f1fbcfff8bddfa\"\u003e7e527bc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove unnecessary client_id when using workload identity provider for auth (\u003ca href=\"https://github.com/openai/openai-python/commit/c39ea8d12a010052d7f02cebe8daabd2d1f89597\"\u003ec39ea8d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e add missing f-string prefix in file type error message (\u003ca href=\"https://github.com/openai/openai-python/commit/c85ebd935cb4b80e7e97ce255437684f6411fb00\"\u003ec85ebd9\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.36.0 (2026-05-07)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.1...v2.36.0\"\u003ev2.35.1...v2.36.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/13c639cc7d57e4fbd4406563511e15eeb88a54b2\"\u003e13c639c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e realtime 2 (\u003ca href=\"https://github.com/openai/openai-python/commit/8fe0ab87e67eeb3cc27426b50093845229520f0e\"\u003e8fe0ab8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.35.1 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.35.0...v2.35.1\"\u003ev2.35.0...v2.35.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e fix imagegen \u003ccode\u003esize\u003c/code\u003e enum regression (\u003ca href=\"https://github.com/openai/openai-python/commit/44846536bc3b02c393daa5bae70a85de04c7f621\"\u003e4484653\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/e75766769547601a25ed83b666c4d0fd046881f0\"\u003e\u003ccode\u003ee757667\u003c/code\u003e\u003c/a\u003e release: 2.38.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/b85b647b5312debb951814dfb9ed13f906d6bf43\"\u003e\u003ccode\u003eb85b647\u003c/code\u003e\u003c/a\u003e feat(api): api update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/d881c67866083ae187e14664e289e68a3ba04686\"\u003e\u003ccode\u003ed881c67\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;chore: check release PR custom code sync\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/d4a322816ad637330e40fdcdee9ca48bc92a2a4f\"\u003e\u003ccode\u003ed4a3228\u003c/code\u003e\u003c/a\u003e chore: check release PR custom code sync\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/48888380cdfc01e4f22f9ed7fbd5250231472e0d\"\u003e\u003ccode\u003e4888838\u003c/code\u003e\u003c/a\u003e chore: remove release automation trigger\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/74978f055a7adf004dec718e80bb46241e54d9ca\"\u003e\u003ccode\u003e74978f0\u003c/code\u003e\u003c/a\u003e chore: trigger release automation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/bab18af787cd5d962aedeb4b5b86df4f6cf28003\"\u003e\u003ccode\u003ebab18af\u003c/code\u003e\u003c/a\u003e chore(api): docs updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/a6f899aa1e046dd0cc18b89c4f73260463888db6\"\u003e\u003ccode\u003ea6f899a\u003c/code\u003e\u003c/a\u003e feat(api): manual updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/2897485d445f2924c5c2a8e6a9f40eec633ff345\"\u003e\u003ccode\u003e2897485\u003c/code\u003e\u003c/a\u003e feat(api): update OpenAPI spec or Stainless config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/a2f1d6c56980713619760c60a5c7bfb580b0adcb\"\u003e\u003ccode\u003ea2f1d6c\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.32.0...v2.38.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio-status` from 1.71.2 to 1.80.0\n\nUpdates `mpmath` from 1.3.0 to 1.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mpmath/mpmath/releases\"\u003empmath's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.4.1\u003c/h2\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix test_hexadecimal_with_libc_bulk(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/1049\"\u003e#1049\u003c/a\u003e (Doug Torrance)\u003c/li\u003e\n\u003cli\u003eKeep available deprecated aliases for mpc/mpf_log() (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eUse version_file option of setuptools-scm to keep version info, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/1048\"\u003e#1048\u003c/a\u003e\n(Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd workaround for test on s390x, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/1061\"\u003e#1061\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/mpmath/mpmath/compare/1.4.0...1.4.1\"\u003ehttps://github.com/mpmath/mpmath/compare/1.4.0...1.4.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.4.0\u003c/h2\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport underscores as digit separators per PEP 515, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/661\"\u003e#661\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd rationals converter for mpf's, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/666\"\u003e#666\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eRewrite bernpoly/eulerpoly to avoid dependency on bernoulli(1) convention, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/700\"\u003e#700\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport base kwarg for from_str(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/703\"\u003e#703\u003c/a\u003e (Jonathan Warner, Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport randmatrix() for mp.iv and mp contexts, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/527\"\u003e#527\u003c/a\u003e (Maximilian Gaukler)\u003c/li\u003e\n\u003cli\u003eAdded rank() function for matrices, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/610\"\u003e#610\u003c/a\u003e (Jan-Philipp Hoffmann)\u003c/li\u003e\n\u003cli\u003eAdd plus flag to select the B_1 sign convention for bernoulli/bernfrac, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/724\"\u003e#724\u003c/a\u003e (Jeremy Tan Jie Rui, Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd mpf.as_integer_ratio() method, support construction of mpf from Decimal objects, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/731\"\u003e#731\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eExpose lower/upper_gamma functions, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/740\"\u003e#740\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport mpc initialization from string, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/743\"\u003e#743\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport asinh/acosh/atanh in the fp context, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/750\"\u003e#750\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport binary/octal/hexadecimal string output, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/711\"\u003e#711\u003c/a\u003e (Jonathan Warner, Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport pickling for matrices and mpi, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/761\"\u003e#761\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport matrix.__array__() dunder method, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/767\"\u003e#767\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport more number syntaxes, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/778\"\u003e#778\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eRun mpmath as a module for interactive work, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/773\"\u003e#773\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/923\"\u003e#923\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/931\"\u003e#931\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/936\"\u003e#936\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/939\"\u003e#939\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/954\"\u003e#954\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd signed option to to_man_exp(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/783\"\u003e#783\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd fp.hypot, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/798\"\u003e#798\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport inf/nan's in ctx.almosteq(), \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/802\"\u003e#802\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eImplement mpf.__format__(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/819\"\u003e#819\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/831\"\u003e#831\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/850\"\u003e#850\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/859\"\u003e#859\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/857\"\u003e#857\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/862\"\u003e#862\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/881\"\u003e#881\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/944\"\u003e#944\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/966\"\u003e#966\u003c/a\u003e (Javier Garcia, Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport conversion from scalar ndarray's, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/821\"\u003e#821\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport rounding modes in mpf.__format__, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/823\"\u003e#823\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/831\"\u003e#831\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/834\"\u003e#834\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/969\"\u003e#969\u003c/a\u003e (Javier Garcia, Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport '%' presentation type for mpf, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/847\"\u003e#847\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport gmpy2-like rounding modes in to_str(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/830\"\u003e#830\u003c/a\u003e (Javier Garcia)\u003c/li\u003e\n\u003cli\u003eImplement 'a'/'A' formating types for mpf.__format__, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/841\"\u003e#841\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/870\"\u003e#870\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd mpc.__format__(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/855\"\u003e#855\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eNow mpf.__round__() returns mpf, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/826\"\u003e#826\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/966\"\u003e#966\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport 'b' (binary) format type for mpf/mpc, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/867\"\u003e#867\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eImplement mpf.__floordiv__() and mpf.__divmod__(), see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/873\"\u003e#873\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd parameters for MPContext constructor, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/876\"\u003e#876\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/963\"\u003e#963\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd MPFR-compatible aliases for rounding modes, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/892\"\u003e#892\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport negative indexes in matrix, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/897\"\u003e#897\u003c/a\u003e (Riccardo Orsi)\u003c/li\u003e\n\u003cli\u003eBetter introspection support for decorated functions, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/900\"\u003e#900\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eAdd moving sofa demo, see \u003ca href=\"https://redirect.github.com/mpmath/mpmath/issues/924\"\u003e#924\u003c/a\u003e (Sergey B Kirpichev)\u003c/li\u003e\n\u003cli\u003eSupport spherica...\n\n_Description has been truncated_","html_url":"https://github.com/skin306152-star/pearnly-app/pull/14","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/skin306152-star%2Fpearnly-app/issues/14","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/14/packages"}},{"old_version":"1.24.14","new_version":"1.27.2.3","update_type":"minor","path":null,"pr_created_at":"2026-05-22T03:12:06.000Z","version_change":"1.24.14 → 1.27.2.3","issue":{"uuid":"4499516261","node_id":"PR_kwDOSdRzNs7eL8x0","number":13,"state":"closed","title":"chore(deps): bump the production-deps group across 1 directory with 10 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-22T04:45:36.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-22T03:12:06.000Z","updated_at":"2026-05-22T04:45:52.000Z","time_to_close":5610,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"production-deps","update_count":10,"packages":[{"name":"starlette","old_version":"0.49.1","new_version":"1.0.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"uvicorn","old_version":"0.32.1","new_version":"0.47.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydantic","old_version":"2.10.3","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.6.1","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pymupdf","old_version":"1.24.14","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"opencv-python-headless","old_version":"4.10.0.84","new_version":"4.13.0.92","repository_url":"https://github.com/opencv/opencv-python"},{"name":"boto3","old_version":"1.35.76","new_version":"1.43.13","repository_url":"https://github.com/boto/boto3"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.29","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"pip-audit","old_version":"2.9.0","new_version":"2.10.0","repository_url":"https://github.com/pypa/pip-audit"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-deps group with 10 updates in the /services/document-parser directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [starlette](https://github.com/Kludex/starlette) | `0.49.1` | `1.0.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.32.1` | `0.47.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.10.3` | `2.13.4` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.6.1` | `2.14.1` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.24.14` | `1.27.2.3` |\n| [opencv-python-headless](https://github.com/opencv/opencv-python) | `4.10.0.84` | `4.13.0.92` |\n| [boto3](https://github.com/boto/boto3) | `1.35.76` | `1.43.13` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.29` |\n| [pip-audit](https://github.com/pypa/pip-audit) | `2.9.0` | `2.10.0` |\n\n\nUpdates `starlette` from 0.49.1 to 1.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/starlette/releases\"\u003estarlette's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.0.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore malformed \u003ccode\u003eHost\u003c/code\u003e header when constructing \u003ccode\u003erequest.url\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3279\"\u003eKludex/starlette#3279\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/starlette/compare/1.0.0...1.0.1\"\u003ehttps://github.com/Kludex/starlette/compare/1.0.0...1.0.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 1.0.0\u003c/h2\u003e\n\u003cp\u003eStarlette 1.0 is here! 🎉\u003c/p\u003e\n\u003cp\u003eAfter nearly eight years since its creation, Starlette has reached its first stable release.\u003c/p\u003e\n\u003cp\u003eA special thank you to \u003ca href=\"https://github.com/lovelydinosaur\"\u003e\u003ccode\u003e@​lovelydinosaur\u003c/code\u003e\u003c/a\u003e, the creator of Starlette, Uvicorn, HTTPX and MkDocs, whose work helped to lay the foundation for the modern async Python ecosystem. 🙏\u003c/p\u003e\n\u003cp\u003eThank you to \u003ca href=\"https://github.com/adriangb\"\u003e\u003ccode\u003e@​adriangb\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/graingert\"\u003e\u003ccode\u003e@​graingert\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/agronholm\"\u003e\u003ccode\u003e@​agronholm\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/florimondmanca\"\u003e\u003ccode\u003e@​florimondmanca\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/aminalaee\"\u003e\u003ccode\u003e@​aminalaee\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/alex-oleshkevich\"\u003e\u003ccode\u003e@​alex-oleshkevich\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/abersheeran\"\u003e\u003ccode\u003e@​abersheeran\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/uSpike\"\u003e\u003ccode\u003e@​uSpike\u003c/code\u003e\u003c/a\u003e for helping make Starlette what it is today. And to all my sponsors - especially \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/huggingface\"\u003e\u003ccode\u003e@​huggingface\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/elevenlabs\"\u003e\u003ccode\u003e@​elevenlabs\u003c/code\u003e\u003c/a\u003e - thank you for your support!\u003c/p\u003e\n\u003cp\u003eThank you to all \u003ca href=\"https://github.com/encode/starlette/graphs/contributors\"\u003e290+ contributors\u003c/a\u003e who have shaped Starlette over the years! ❤️\u003c/p\u003e\n\u003cp\u003eRead more on the \u003ca href=\"https://marcelotryle.com/blog/2026/03/22/starlette-10-is-here/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCheck out the full release notes at \u003ca href=\"https://www.starlette.io/release-notes/#100-march-22-2026\"\u003ehttps://www.starlette.io/release-notes/#100-march-22-2026\u003c/a\u003e\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/encode/starlette/compare/1.0.0rc1...1.0.0\"\u003ehttps://github.com/encode/starlette/compare/1.0.0rc1...1.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 1.0.0rc1\u003c/h2\u003e\n\u003cp\u003eWe're ready! 🚀\u003c/p\u003e\n\u003cp\u003eThe first release candidate for Starlette 1.0 is here! After years on ZeroVer, we're finally making the jump.\u003c/p\u003e\n\u003cp\u003eThis release removes all deprecated features marked for 1.0.0, along with some last-minute bug fixes.\u003c/p\u003e\n\u003cp\u003eA special thank you to \u003ca href=\"https://github.com/lovelydinosaur\"\u003e\u003ccode\u003e@​lovelydinosaur\u003c/code\u003e\u003c/a\u003e, the creator of Starlette, Uvicorn, HTTPX and MkDocs, whose work helped to lay the foundation for the modern async Python ecosystem. 🙏\u003c/p\u003e\n\u003cp\u003eThank you to \u003ca href=\"https://github.com/adriangb\"\u003e\u003ccode\u003e@​adriangb\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/graingert\"\u003e\u003ccode\u003e@​graingert\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/agronholm\"\u003e\u003ccode\u003e@​agronholm\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/florimondmanca\"\u003e\u003ccode\u003e@​florimondmanca\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/aminalaee\"\u003e\u003ccode\u003e@​aminalaee\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/alex-oleshkevich\"\u003e\u003ccode\u003e@​alex-oleshkevich\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/abersheeran\"\u003e\u003ccode\u003e@​abersheeran\u003c/code\u003e\u003c/a\u003e for helping make Starlette what it is today. And to all my sponsors - especially \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/huggingface\"\u003e\u003ccode\u003e@​huggingface\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/elevenlabs\"\u003e\u003ccode\u003e@​elevenlabs\u003c/code\u003e\u003c/a\u003e - thank you for your support!\u003c/p\u003e\n\u003cp\u003eThank you to all \u003ca href=\"https://github.com/encode/starlette/graphs/contributors\"\u003e290+ contributors\u003c/a\u003e who have shaped Starlette over the years!\u003c/p\u003e\n\u003cp\u003eCheck out the full release notes at \u003ca href=\"https://www.starlette.io/release-notes/#100rc1-february-23-2026\"\u003ehttps://www.starlette.io/release-notes/#100rc1-february-23-2026\u003c/a\u003e\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/starlette/compare/0.52.1...1.0.0rc1\"\u003ehttps://github.com/Kludex/starlette/compare/0.52.1...1.0.0rc1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.52.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOnly use \u003ccode\u003etyping_extensions\u003c/code\u003e in older Python versions 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/starlette/pull/3109\"\u003eKludex/starlette#3109\u003c/a\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/starlette/blob/main/docs/release-notes.md\"\u003estarlette's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.1 (May 21, 2026)\u003c/h2\u003e\n\u003ch4\u003eFixed\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore malformed \u003ccode\u003eHost\u003c/code\u003e header when constructing \u003ccode\u003erequest.url\u003c/code\u003e \u003ca href=\"https://redirect.github.com/encode/starlette/pull/3279\"\u003e#3279\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.0 (March 22, 2026)\u003c/h2\u003e\n\u003cp\u003eStarlette 1.0 is here!\u003c/p\u003e\n\u003cp\u003eAfter nearly eight years since its creation, Starlette has reached its first stable release.\nThank you to everyone who tested the release candidate and reported issues.\u003c/p\u003e\n\u003cp\u003eYou can read more on the \u003ca href=\"https://marcelotryle.com/blog/2026/03/22/starlette-10-is-here/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\n\u003ch4\u003eAdded\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTrack session access and modification in \u003ccode\u003eSessionMiddleware\u003c/code\u003e \u003ca href=\"https://redirect.github.com/encode/starlette/pull/3166\"\u003e#3166\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixed\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle websocket denial responses in \u003ccode\u003eStreamingResponse\u003c/code\u003e and \u003ccode\u003eFileResponse\u003c/code\u003e \u003ca href=\"https://redirect.github.com/encode/starlette/pull/3189\"\u003e#3189\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for field accumulation in \u003ccode\u003eFormParser\u003c/code\u003e \u003ca href=\"https://redirect.github.com/encode/starlette/pull/3179\"\u003e#3179\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eMove \u003ccode\u003eparser.finalize()\u003c/code\u003e inside try/except in \u003ccode\u003eMultiPartParser.parse()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/encode/starlette/pull/3153\"\u003e#3153\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.0rc1 (February 23, 2026)\u003c/h2\u003e\n\u003cp\u003eWe're ready! I'm thrilled to announce the first release candidate for Starlette 1.0.\u003c/p\u003e\n\u003cp\u003eStarlette was created in June 2018 by Tom Christie, and has been on ZeroVer for years. Today, it's downloaded\nalmost \u003ca href=\"https://pypistats.org/packages/starlette\"\u003e10 million times a day\u003c/a\u003e, serves as the foundation for FastAPI,\nand has inspired many other frameworks. In the age of AI, Starlette continues to play an important role as a\ndependency of the Python MCP SDK.\u003c/p\u003e\n\u003cp\u003eThis release focuses on removing deprecated features that were marked for removal in 1.0.0, along with some\nlast minute bug fixes. It's a release candidate, so we can gather feedback from the community before the final\n1.0.0 release soon.\u003c/p\u003e\n\u003cp\u003eA huge thank you to all the contributors who have helped make Starlette what it is today.\nIn particular, I'd like to recognize:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lovelydinosaur\"\u003eKim Christie\u003c/a\u003e - The original creator of Starlette, Uvicorn, and MkDocs, and the\ncurrent maintainer of HTTPX. Kim's work helped lay the foundation for the modern async Python ecosystem.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/adriangb\"\u003eAdrian Garcia Badaracco\u003c/a\u003e - One of the smartest people I know, whom I have the pleasure of working with at Pydantic.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/graingert\"\u003eThomas Grainger\u003c/a\u003e - My async teacher, always ready to help with questions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm\"\u003eAlex Grönholm\u003c/a\u003e - Another async mentor, always prompt to help with questions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/florimondmanca\"\u003eFlorimond Manca\u003c/a\u003e - Always present in the early days of both Starlette and Uvicorn, and helped a lot in the ecosystem.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminalaee\"\u003eAmin Alaee\u003c/a\u003e - Contributed a lot with file-related PRs.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tiangolo\"\u003eSebastián Ramírez\u003c/a\u003e - Maintains FastAPI upstream, and always in contact to help with upstream issues.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/alex-oleshkevich\"\u003eAlex Oleshkevich\u003c/a\u003e - Helped a lot on templates and many discussions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/starlette/commit/48f8e331b23ca692f4713ac1f370bff1b5cd034c\"\u003e\u003ccode\u003e48f8e33\u003c/code\u003e\u003c/a\u003e Version 1.0.1 (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3281\"\u003e#3281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/f078832be1aa27ab0e7ec3153479a347749e967a\"\u003e\u003ccode\u003ef078832\u003c/code\u003e\u003c/a\u003e Remove Hugging Face sponsor block from docs (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3280\"\u003e#3280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/472951eba8f6e35be845fd1b91625a1b5488294b\"\u003e\u003ccode\u003e472951e\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3277\"\u003e#3277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/764dab0dcfb9033d75442d7a359645c9f94648c6\"\u003e\u003ccode\u003e764dab0\u003c/code\u003e\u003c/a\u003e Ignore malformed \u003ccode\u003eHost\u003c/code\u003e header when constructing \u003ccode\u003erequest.url\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3279\"\u003e#3279\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/19d08115ce56da8d4da2838ecdd9c5882cb2b365\"\u003e\u003ccode\u003e19d0811\u003c/code\u003e\u003c/a\u003e Harden GitHub Actions workflows and Dependabot config (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3276\"\u003e#3276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/01f46378120fe2c6312074ed7e997e3b5f7d8c20\"\u003e\u003ccode\u003e01f4637\u003c/code\u003e\u003c/a\u003e chore(deps): bump idna from 3.10 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3274\"\u003e#3274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/b8fa5140d2ef9f22483d777e936ab4c2df897179\"\u003e\u003ccode\u003eb8fa514\u003c/code\u003e\u003c/a\u003e docs: fix typos in TestClient docs and test_requests comment (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3266\"\u003e#3266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/e935b6b5d4616c2317bbdadfb4cf07a8e7637955\"\u003e\u003ccode\u003ee935b6b\u003c/code\u003e\u003c/a\u003e fix uvicorn domain (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3269\"\u003e#3269\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/96af9521a7e46bc0d00b5227186f03b70b6d242f\"\u003e\u003ccode\u003e96af952\u003c/code\u003e\u003c/a\u003e Add 7-day cooldown for dependency resolution via uv exclude-newer (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3265\"\u003e#3265\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/starlette/commit/61e385bd6dc438a90493c50f65ed232430f873fb\"\u003e\u003ccode\u003e61e385b\u003c/code\u003e\u003c/a\u003e Add zizmor GitHub Actions security analysis workflow (\u003ca href=\"https://redirect.github.com/Kludex/starlette/issues/3264\"\u003e#3264\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/starlette/compare/0.49.1...1.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.32.1 to 0.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.47.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process 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/2919\"\u003eKludex/uvicorn#2919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration 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/2920\"\u003eKludex/uvicorn#2920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2927\"\u003eKludex/uvicorn#2927\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.46.0...0.47.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio 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/2917\"\u003eKludex/uvicorn#2917\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.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.45.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware 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/2903\"\u003eKludex/uvicorn#2903\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2905\"\u003eKludex/uvicorn#2905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively 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/2907\"\u003eKludex/uvicorn#2907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config 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/2906\"\u003eKludex/uvicorn#2906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert empty context for ASGI runs 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/2911\"\u003eKludex/uvicorn#2911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context 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/2912\"\u003eKludex/uvicorn#2912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2913\"\u003eKludex/uvicorn#2913\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/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2870\"\u003eKludex/uvicorn#2870\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.44.0...0.45.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.44.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplement websocket keepalive pings for websockets-sansio 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/2888\"\u003eKludex/uvicorn#2888\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.43.0...0.44.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.43.0...0.44.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.43.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEmit \u003ccode\u003ehttp.disconnect\u003c/code\u003e ASGI \u003ccode\u003ereceive()\u003c/code\u003e event on server shutting down for streaming responses (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse native \u003ccode\u003econtext\u003c/code\u003e parameter for \u003ccode\u003ecreate_task\u003c/code\u003e on Python 3.11+ (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2859\"\u003e#2859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop cast in ASGI types (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2875\"\u003e#2875\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0\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/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.47.0 (May 14, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2920\"\u003e#2920\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2927\"\u003e#2927\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.45.0 (April 21, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2905\"\u003e#2905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2913\"\u003e#2913\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Explicitly start ASGI run with empty context\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2903\"\u003e#2903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.44.0 (April 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement websocket keepalive pings for websockets-sansio (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2888\"\u003e#2888\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.43.0 (April 3, 2026)\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/Kludex/uvicorn/commit/479a2c0c89186714f1aac52aecdebebf271395ac\"\u003e\u003ccode\u003e479a2c0\u003c/code\u003e\u003c/a\u003e Version 0.47.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2937\"\u003e#2937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/89347fd166ebedf98fb3f806ce8ea44e93b1c2b5\"\u003e\u003ccode\u003e89347fd\u003c/code\u003e\u003c/a\u003e Add 7-day cooldown for dependency resolution via uv exclude-newer (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2936\"\u003e#2936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/767315b38ae509cee9fe8ee9d09f6da920536096\"\u003e\u003ccode\u003e767315b\u003c/code\u003e\u003c/a\u003e Drop unused contents/actions permissions from zizmor workflow (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2935\"\u003e#2935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/f25ee43e68a9678453cbca99ad96f1a447ff34af\"\u003e\u003ccode\u003ef25ee43\u003c/code\u003e\u003c/a\u003e chore(deps): bump urllib3 from 2.6.3 to 2.7.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/8782666189a3d36c978de5698620db705659bf44\"\u003e\u003ccode\u003e8782666\u003c/code\u003e\u003c/a\u003e Fix typo in \u003ccode\u003edocs/deployment/index.md\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2932\"\u003e#2932\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/ad5ff87c869e8a34e9b04fcd5ca38d65c526893c\"\u003e\u003ccode\u003ead5ff87\u003c/code\u003e\u003c/a\u003e Treat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2927\"\u003e#2927\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/6761b2c8f9272fa0e908d0b9cdcb3cb0aa11382f\"\u003e\u003ccode\u003e6761b2c\u003c/code\u003e\u003c/a\u003e Remove Hugging Face sponsor block from docs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2923\"\u003e#2923\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/438f64834de00708a9bb3548a36090e7a924ad84\"\u003e\u003ccode\u003e438f648\u003c/code\u003e\u003c/a\u003e Surface sponsors on welcome page and sidebar (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2921\"\u003e#2921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/10ddc6dd296cb6e432a00835abe27f1c822373c1\"\u003e\u003ccode\u003e10ddc6d\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2920\"\u003e#2920\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b499bc45101d920e691e384025d728507215d4d1\"\u003e\u003ccode\u003eb499bc4\u003c/code\u003e\u003c/a\u003e Eagerly import the ASGI app in the parent process (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.32.1...0.47.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.10.3 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0 2026-04-13\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/v2.13.4/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.1\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\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/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.10.3...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.6.1 to 2.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/850\"\u003epydantic/pydantic-settings#850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 5 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/854\"\u003epydantic/pydantic-settings#854\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/853\"\u003epydantic/pydantic-settings#853\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/856\"\u003epydantic/pydantic-settings#856\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/858\"\u003epydantic/pydantic-settings#858\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.1 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/859\"\u003epydantic/pydantic-settings#859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix parsing env vars into Optional Strict types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/792\"\u003epydantic/pydantic-settings#792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with mutually recursive models in CLI by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/794\"\u003epydantic/pydantic-settings#794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env_file from model_config ignored in CliApp.run() (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/795\"\u003e#795\u003c/a\u003e) by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/796\"\u003epydantic/pydantic-settings#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/798\"\u003epydantic/pydantic-settings#798\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/801\"\u003epydantic/pydantic-settings#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump samuelcolvin/check-python-version from 4.1 to 5 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/803\"\u003epydantic/pydantic-settings#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 4 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/804\"\u003epydantic/pydantic-settings#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 5 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/805\"\u003epydantic/pydantic-settings#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/806\"\u003epydantic/pydantic-settings#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore chardet and group GitHub Actions in Dependabot by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/808\"\u003epydantic/pydantic-settings#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 4 to 8 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/809\"\u003epydantic/pydantic-settings#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/810\"\u003epydantic/pydantic-settings#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport reading .env files from FIFOs (e.g. 1Password Environments) by \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AliasChoices ignored when changing provider priority by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/813\"\u003epydantic/pydantic-settings#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve KeyError in run_subcommand for underscore field names by \u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/814\"\u003epydantic/pydantic-settings#814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLiteral[numeric Enum]\u003c/code\u003e coercion for CLI and env vars by \u003ca href=\"https://github.com/m9810223\"\u003e\u003ccode\u003e@​m9810223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/811\"\u003epydantic/pydantic-settings#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nested discriminated unions not discovered by env/CLI providers by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/816\"\u003epydantic/pydantic-settings#816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/820\"\u003epydantic/pydantic-settings#820\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCLI ensure env nested max split internally. by \u003ca href=\"https://github.com/kschwab\"\u003e\u003ccode\u003e@​kschwab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/821\"\u003epydantic/pydantic-settings#821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/824\"\u003epydantic/pydantic-settings#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eboto3-stubs\u003c/code\u003e to \u003ccode\u003etypes-boto3\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/831\"\u003epydantic/pydantic-settings#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI not recognizing field name with validate_by_name and AliasChoices by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/826\"\u003epydantic/pydantic-settings#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow customisation of the dotevn setting source to filter variables by \u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/833\"\u003epydantic/pydantic-settings#833\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce yamlfmt by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/836\"\u003epydantic/pydantic-settings#836\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump boto3 from 1.42.82 to 1.42.83 in the python-packages group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/837\"\u003epydantic/pydantic-settings#837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce zizmor by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/838\"\u003epydantic/pydantic-settings#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CliPositionalArg[list[CustomType]] crash for custom types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/839\"\u003epydantic/pydantic-settings#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/842\"\u003epydantic/pydantic-settings#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/844\"\u003epydantic/pydantic-settings#844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/847\"\u003epydantic/pydantic-settings#847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to \u003ccode\u003ejson_schema_extra\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/843\"\u003epydantic/pydantic-settings#843\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/848\"\u003epydantic/pydantic-settings#848\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/e95c30bec8cfaee88ee275138c064aea97a25bdf\"\u003e\u003ccode\u003ee95c30b\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/859\"\u003e#859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/0c8734581b6cf70a995afad603ac456631d00621\"\u003e\u003ccode\u003e0c87345\u003c/code\u003e\u003c/a\u003e Fix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/858\"\u003e#858\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/7bd0072795a800065b42210b6dca90fc9b83daf7\"\u003e\u003ccode\u003e7bd0072\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 2 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/856\"\u003e#856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/b03e573d017ed48e1c2774a5e0b715db9766c76b\"\u003e\u003ccode\u003eb03e573\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/853\"\u003e#853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/eaa3b434938411ec8a3717ea646614561e713f51\"\u003e\u003ccode\u003eeaa3b43\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 5 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/854\"\u003e#854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9f95615c24c6813c1d7d203576581a79cb6d9e8e\"\u003e\u003ccode\u003e9f95615\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/850\"\u003e#850\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3\"\u003e\u003ccode\u003e8916bee\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/848\"\u003e#848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5\"\u003e\u003ccode\u003e39e551c\u003c/code\u003e\u003c/a\u003e Fix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to `json_schema_...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14\"\u003e\u003ccode\u003e9ed7f48\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/847\"\u003e#847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9\"\u003e\u003ccode\u003e617c690\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/844\"\u003e#844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.6.1...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.24.14 to 1.27.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.14...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opencv-python-headless` from 4.10.0.84 to 4.13.0.92\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/opencv/opencv-python/releases\"\u003eopencv-python-headless's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.13.0.92\u003c/h2\u003e\n\u003cp\u003eFollow up release for 4.13.0 with X server dependency fix. See \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/28438\"\u003e#28438\u003c/a\u003e for details.\u003c/p\u003e\n\u003ch2\u003e4.13.0.90\u003c/h2\u003e\n\u003cp\u003eComplete OpenCV 4.13.0 changelog: \u003ca href=\"https://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4130\"\u003ehttps://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4130\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ePython specific:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eManylinux 2_28 support, Numpy 2.4 support, Python 3.14 support\u003c/li\u003e\n\u003cli\u003eTuned Python bindings for logging \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27812\"\u003e#27812\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMarked Feature2D.detectAndCompute mask as optional in Python type stubs \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27544\"\u003e#27544\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMarked distCoeffs/R/D as optional in calib3d functions \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27564\"\u003e#27564\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded DLPACK support \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27581\"\u003e#27581\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27861\"\u003e#27861\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed memory leaks in pybindings \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27738\"\u003e#27738\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd PathLike type hints for args annotated with CV_WRAP_FILE_PATH \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27767\"\u003e#27767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed memory leak in pyopencv_to for path-like objects \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/28047\"\u003e#28047\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTunned Python bindings: use export_name as resolved typename for AliasTypeNode \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27997\"\u003e#27997\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003epython: fix pytest-cov false warnings by using compile() with full file path in exec_file_wrapper \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/28093\"\u003e#28093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed python scalar typing issues \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27620\"\u003e#27620\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed bug in ifdef state machine in header parser for bindings \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27393\"\u003e#27393\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWrap GridType field in cv::findCirclesGrid parameters structure \u003ca href=\"https://redirect.github.com/opencv/opencv/issues/27689\"\u003e#27689\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.0.88\u003c/h2\u003e\n\u003cp\u003eComplete OpenCV 4.12.0 changelog: \u003ca href=\"https://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4120\"\u003ehttps://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4120\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ePython:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded libavif to the package and corresponding image format support on Linux and Mac OS. Windows is in progress.\u003c/li\u003e\n\u003cli\u003eEnabled GIF support by default.\u003c/li\u003e\n\u003cli\u003eUpdated Numpy dependency rules. Packages for Python 3.9+ are built with Numpy 2.x. Packages for older Python version are built with Numpy 1.x.\u003c/li\u003e\n\u003cli\u003eImproved libjpeg-turbo performance in Windows builds (added NASM and assembly branches).\u003c/li\u003e\n\u003cli\u003eMade DNN, FLANN, G-API modules optional during the package build (bindings generation and typing).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.11.0.86\u003c/h2\u003e\n\u003cp\u003eComplete OpenCV 4.11.0 changelog: \u003ca href=\"https://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4110\"\u003ehttps://github.com/opencv/opencv/wiki/OpenCV-Change-Logs#version4110\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ePython:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded Python 3.13 support\u003c/li\u003e\n\u003cli\u003eFixed build with Python 3.12\u003c/li\u003e\n\u003cli\u003eFixed confg path for the case when Python Limited API is disabled\u003c/li\u003e\n\u003cli\u003eFixed build with system wide CMake, if CMake is not available with pip\u003c/li\u003e\n\u003cli\u003eEnabled all jpeg-turbo optimizations on Windows (assembler)\u003c/li\u003e\n\u003cli\u003eSplit Python type stubs per-module to allow modules list customization\u003c/li\u003e\n\u003cli\u003eMinimal Mac OS raised to 13.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/opencv/opencv-python/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.35.76 to 1.43.13\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/97921f4babf469d1c1fbbb27746bbaece6008122\"\u003e\u003ccode\u003e97921f4\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.13'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1307ac2642ed8e53aca983b1c89e952309a0c66d\"\u003e\u003ccode\u003e1307ac2\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/c75c901f5be45cce8e8f46733ee0562d06110c81\"\u003e\u003ccode\u003ec75c901\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d3f2433ff49062a75426c406e606625b69a32eb6\"\u003e\u003ccode\u003ed3f2433\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.12'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d5eddf97fcacb8e8aecf0ff043501ff97454f105\"\u003e\u003ccode\u003ed5eddf9\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.12' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/93f3a42377b288934f08416a9c3b63920d8163c6\"\u003e\u003ccode\u003e93f3a42\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/5355abdca2dfffff34b4e7b05135911845a87631\"\u003e\u003ccode\u003e5355abd\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/9ef5febabaaa8cb403fb3a5e97b0b6d333a0851a\"\u003e\u003ccode\u003e9ef5feb\u003c/code\u003e\u003c/a\u003e Bump idna from 3.7 to 3.15 (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4788\"\u003e#4788\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/c628e75265dc9d48b40a216c72575e46348bbd21\"\u003e\u003ccode\u003ec628e75\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.11'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/210f10744645854d03856c59e73b4db84144dacb\"\u003e\u003ccode\u003e210f107\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.11' into develop\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.35.76...1.43.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.12.1 to 2.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/releases\"\u003epyjwt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13.0\u003c/h2\u003e\n\u003ch1\u003ePyJWT 2.13.0 — Security Release\u003c/h1\u003e\n\u003cp\u003eThis release bundles five security fixes plus three additional hardening / spec-compliance changes. We recommend all users upgrade.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx\"\u003e\u003ccode\u003eGHSA-xgmm-8j9v-c9wx\u003c/code\u003e\u003c/a\u003e — JWK JSON accepted as HMAC secret (algorithm confusion).\u003c/strong\u003e \u003ccode\u003eHMACAlgorithm.prepare_key\u003c/code\u003e previously rejected PEM- and SSH-formatted asymmetric keys but did not catch a JWK passed as a raw JSON string. In a verifier configured with both symmetric and asymmetric algorithms in \u003ccode\u003ealgorithms=[…]\u003c/code\u003e and a raw-JSON JWK as the key, an attacker could forge HS256 tokens using the JWK text as the HMAC secret. The guard has been extended to reject any JWK-shaped JSON. \u003cem\u003eReported by \u003ca href=\"https://github.com/aradona91\"\u003e\u003ccode\u003e@​aradona91\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f\"\u003e\u003ccode\u003eGHSA-jq35-7prp-9v3f\u003c/code\u003e\u003c/a\u003e — Algorithm allow-list bypass with \u003ccode\u003ePyJWK\u003c/code\u003e / \u003ccode\u003ePyJWKClient\u003c/code\u003e.\u003c/strong\u003e When verifying with a \u003ccode\u003ePyJWK\u003c/code\u003e, the caller's \u003ccode\u003ealgorithms=[…]\u003c/code\u003e allow-list was checked against the token header \u003ccode\u003ealg\u003c/code\u003e as a string only; actual verification used the algorithm bound to the \u003ccode\u003ePyJWK\u003c/code\u003e. An attacker who controlled a registered JWKS key could sign with one algorithm and advertise another on the header. PyJWT now requires the token header \u003ccode\u003ealg\u003c/code\u003e to match the \u003ccode\u003ePyJWK\u003c/code\u003e's algorithm before verification. \u003cem\u003eReported by \u003ca href=\"https://github.com/sushi-gif\"\u003e\u003ccode\u003e@​sushi-gif\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39\"\u003e\u003ccode\u003eGHSA-w7vc-732c-9m39\u003c/code\u003e\u003c/a\u003e — DoS via base64 decode of unused payload segment when \u003ccode\u003eb64=false\u003c/code\u003e.\u003c/strong\u003e For detached-payload JWS (\u003ccode\u003eb64=false\u003c/code\u003e), the compact-form payload segment was base64-decoded before being discarded in favor of the caller-supplied \u003ccode\u003edetached_payload\u003c/code\u003e. An attacker could inflate the unused segment to force CPU + memory cost without holding a valid signature. The segment is now required to be empty per RFC 7515 Appendix F, and is no longer decoded. \u003cem\u003eReported by \u003ca href=\"https://github.com/thesmartshadow\"\u003e\u003ccode\u003e@​thesmartshadow\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4\"\u003e\u003ccode\u003eGHSA-993g-76c3-p5m4\u003c/code\u003e\u003c/a\u003e — \u003ccode\u003ePyJWKClient\u003c/code\u003e accepts non-HTTP(S) URIs.\u003c/strong\u003e \u003ccode\u003ePyJWKClient.fetch_data\u003c/code\u003e passed its URI to \u003ccode\u003eurllib.request.urlopen\u003c/code\u003e, which by default also handles \u003ccode\u003efile://\u003c/code\u003e, \u003ccode\u003eftp://\u003c/code\u003e, and \u003ccode\u003edata:\u003c/code\u003e schemes. An application that fed an attacker-influenced URI into \u003ccode\u003ePyJWKClient\u003c/code\u003e could be coerced into reading local files or reaching other unintended schemes. \u003ccode\u003ePyJWKClient\u003c/code\u003e now rejects any URI whose scheme isn't \u003ccode\u003ehttp\u003c/code\u003e or \u003ccode\u003ehttps\u003c/code\u003e. \u003cem\u003eReported by \u003ca href=\"https://github.com/KEIJOT\"\u003e\u003ccode\u003e@​KEIJOT\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8\"\u003e\u003ccode\u003eGHSA-fhv5-28vv-h8m8\u003c/code\u003e\u003c/a\u003e — \u003ccode\u003ePyJWKClient\u003c/code\u003e cache wiped on fetch error.\u003c/strong\u003e A \u003ccode\u003efinally\u003c/code\u003e-block \u003ccode\u003eput(jwk_set=None)\u003c/code\u003e cleared the JWK Set cache whenever a fetch raised, turning a transient JWKS-endpoint outage into application-wide auth failure. The cache write was moved into the success path; transient errors no longer evict valid cached keys. \u003cem\u003eReported by \u003ca href=\"https://github.com/eddieran\"\u003e\u003ccode\u003e@​eddieran\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReject empty HMAC keys outright in \u003ccode\u003eHMACAlgorithm.prepare_key\u003c/code\u003e with \u003ccode\u003eInvalidKeyError\u003c/code\u003e instead of accepting them with only a warning. Defends against the \u003ccode\u003eos.getenv(\u0026quot;JWT_SECRET\u0026quot;, \u0026quot;\u0026quot;)\u003c/code\u003e footgun. \u003cem\u003eThanks to \u003ca href=\"https://github.com/SnailSploit\"\u003e\u003ccode\u003e@​SnailSploit\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/spartan8806\"\u003e\u003ccode\u003e@​spartan8806\u003c/code\u003e\u003c/a\u003e for the reports.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eForward per-call \u003ccode\u003eoptions\u003c/code\u003e (including \u003ccode\u003eenforce_minimum_key_length\u003c/code\u003e) from \u003ccode\u003ePyJWT.decode\u003c/code\u003e through to \u003ccode\u003ePyJWS._verify_signature\u003c/code\u003e. The option was previously silently dropped between the two layers, so it only took effect when set on the \u003ccode\u003ePyJWT\u003c/code\u003e instance. \u003cem\u003eThanks to \u003ca href=\"https://github.com/WLUB\"\u003e\u003ccode\u003e@​WLUB\u003c/code\u003e\u003c/a\u003e for the report.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRFC 7797 §3 compliance for \u003ccode\u003eb64=false\u003c/code\u003e:\u003c/strong\u003e the encoder now auto-adds \u003ccode\u003e\u0026quot;b64\u0026quot;\u003c/code\u003e to \u003ccode\u003ecrit\u003c/code\u003e, and the decoder rejects tokens that set \u003ccode\u003eb64=false\u003c/code\u003e without listing it in \u003ccode\u003ecrit\u003c/code\u003e. \u003cem\u003eThanks to \u003ca href=\"https://github.com/MachineLearning-Nerd\"\u003e\u003ccode\u003e@​MachineLearning-Nerd\u003c/code\u003e\u003c/a\u003e for the report.\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate the \u003ccode\u003edev\u003c/code\u003e, \u003ccode\u003edocs\u003c/code\u003e, and \u003ccode\u003etests\u003c/code\u003e package extras to dependency groups, by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1152\"\u003e#1152\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eUpgrade notes\u003c/h2\u003e\n\u003cp\u003eMost fixes are invisible to correctly-configured callers. A few behavioral changes you may encounter:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEmpty HMAC keys now raise.\u003c/strong\u003e If your app passed \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e or \u003ccode\u003eb\u0026quot;\u0026quot;\u003c/code\u003e as a secret (often via a missing env var, e.g. \u003ccode\u003eos.getenv(\u0026quot;JWT_SECRET\u0026quot;, \u0026quot;\u0026quot;)\u003c/code\u003e), \u003ccode\u003eencode\u003c/code\u003e/\u003ccode\u003edecode\u003c/code\u003e will now raise \u003ccode\u003eInvalidKeyError\u003c/code\u003e. This is the intended behavior — fix the configuration.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePyJWK\u003c/code\u003e decoding now requires the token's \u003ccode\u003ealg\u003c/code\u003e to match the JWK's algorithm.\u003c/strong\u003e Previously a mismatch was silently honored if the header \u003ccode\u003ealg\u003c/code\u003e appeared in the allow-list. Tokens that relied on this mismatch will now fail with \u003ccode\u003eInvalidAlgorithmError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePyJWKClient\u003c/code\u003e now rejects non-HTTP(S) URIs at construction time.\u003c/strong\u003e Tests or dev environments that fetched JWKS from \u003ccode\u003efile://\u003c/code\u003e URIs need to switch to a local HTTP server or load the JWKS by other means (e.g. construct \u003ccode\u003ePyJWKSet.from_dict(...)\u003c/code\u003e directly).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eb64=false\u003c/code\u003e tokens are now strictly RFC 7515 / 7797 compliant.\u003c/strong\u003e Tokens with a non-empty compact-form payload segment, or that omit \u003ccode\u003e\u0026quot;b64\u0026quot;\u003c/code\u003e from \u003ccode\u003ecrit\u003c/code\u003e, will be rejected. PyJWT-produced tokens always satisfy both invariants, so round-trips through PyJWT are unaffected.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenforce_minimum_key_length\u003c/code\u003e set per-call now takes effect.\u003c/strong\u003e Callers who passed \u003ccode\u003eoptions={\u0026quot;enforce_minimum_key_length\u0026quot;: True}\u003c/code\u003e to \u003ccode\u003ejwt.decode()\u003c/code\u003e previously got no enforce...\n\n_Description has been truncated_\n\n\u003c!-- This is an auto-generated comment: release notes by coderabbit.ai --\u003e\n\n## Summary by CodeRabbit\n\n* **Chores**\n  * Updated multiple application dependencies to newer versions for improved stability and performance.\n  * Upgraded security auditing tooling to the latest release.\n\n\u003c!-- review_stack_entry_start --\u003e\n\n[![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/Automation-Architecture/au-group/pull/13?utm_source=github_walkthrough\u0026utm_medium=github\u0026utm_campaign=change_stack)\n\n\u003c!-- review_stack_entry_end --\u003e\n\n\u003c!-- end of auto-generated comment: release notes by coderabbit.ai --\u003e","html_url":"https://github.com/Automation-Architecture/au-group/pull/13","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Automation-Architecture%2Fau-group/issues/13","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/13/packages"}},{"old_version":"\u003e=1.26.1","new_version":"\u003e=1.27.2.3","update_type":"minor","path":null,"pr_created_at":"2026-05-18T02:03:13.000Z","version_change":"\u003e=1.26.1 → \u003e=1.27.2.3","issue":{"uuid":"4465760707","node_id":"PR_kwDOAGnegs7cexMl","number":1345,"state":"closed","title":"Update pymupdf requirement from \u003e=1.26.1 to \u003e=1.27.2.3","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-18T04:33:06.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-18T02:03:13.000Z","updated_at":"2026-05-18T04:33:08.000Z","time_to_close":8993,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"pymupdf","old_version":"\u003e=1.26.1","new_version":"\u003e=1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.1...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/ciromattia/kcc/pull/1345","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciromattia%2Fkcc/issues/1345","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1345/packages"}},{"old_version":"1.25.3","new_version":"1.27.2.3","update_type":"minor","path":"/gateway","pr_created_at":"2026-05-17T20:22:22.000Z","version_change":"1.25.3 → 1.27.2.3","issue":{"uuid":"4464825372","node_id":"PR_kwDOSIAG287cb6Go","number":45,"state":"open","title":"chore(deps): bump the all group in /gateway with 5 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-17T20:22:22.000Z","updated_at":"2026-05-17T20:23:39.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"all","update_count":5,"packages":[{"name":"websocket-client","old_version":"1.8.0","new_version":"1.9.0","repository_url":"https://github.com/websocket-client/websocket-client"},{"name":"websockify","old_version":"0.12.0","new_version":"0.13.0","repository_url":"https://github.com/novnc/websockify"},{"name":"cryptography","old_version":"44.0.0","new_version":"48.0.0","repository_url":"https://github.com/pyca/cryptography"},{"name":"pymupdf","old_version":"1.25.3","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"python-docx","old_version":"1.1.2","new_version":"1.2.0","repository_url":"https://github.com/python-openxml/python-docx"}],"path":"/gateway","ecosystem":"pip"},"body":"Bumps the all group in /gateway with 5 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [websocket-client](https://github.com/websocket-client/websocket-client) | `1.8.0` | `1.9.0` |\n| [websockify](https://github.com/novnc/websockify) | `0.12.0` | `0.13.0` |\n| [cryptography](https://github.com/pyca/cryptography) | `44.0.0` | `48.0.0` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.25.3` | `1.27.2.3` |\n| [python-docx](https://github.com/python-openxml/python-docx) | `1.1.2` | `1.2.0` |\n\nUpdates `websocket-client` from 1.8.0 to 1.9.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/websocket-client/websocket-client/releases\"\u003ewebsocket-client's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.9.0\u003c/h2\u003e\n\u003cp\u003e1.9.0\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/websocket-client/websocket-client/blob/master/ChangeLog\"\u003ewebsocket-client's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e1.9.0\n\u003cul\u003e\n\u003cli\u003eRemove Python 3.8 support (EOL), add Python 3.13 (5f25030)\u003c/li\u003e\n\u003cli\u003eRemove localhost and 127.0.0.1 from default NO_PROXY list (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/994\"\u003e#994\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport IPv6 CIDRs in the no_proxy option (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1033\"\u003e#1033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix thread safety condition in \u003ccode\u003eteardown()\u003c/code\u003e to improve \u003ccode\u003erun_forever()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1015\"\u003e#1015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1024\"\u003e#1024\u003c/a\u003e by chunking data, recursion in on_error callback, thread leak in \u003ccode\u003e_stop_ping_thread()\u003c/code\u003e, avoid implicit None in \u003ccode\u003erecv()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid bare except clauses for better error handling (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix async (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/983\"\u003e#983\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve mypy type errors (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/996\"\u003e#996\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1006\"\u003e#1006\u003c/a\u003e, 813d570)\u003c/li\u003e\n\u003cli\u003eTest coverage improvements (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1035\"\u003e#1035\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eflake8 linting improvements (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1034\"\u003e#1034\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/websocket-client/websocket-client/commit/e46a8fe2dbc74f88a2cfa749f2499f7cc6f31409\"\u003e\u003ccode\u003ee46a8fe\u003c/code\u003e\u003c/a\u003e 1.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/ab81eab9c89da8848cabe8057afc921eed8f78b3\"\u003e\u003ccode\u003eab81eab\u003c/code\u003e\u003c/a\u003e Bug fixes (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/63058ab33be55dd955f25a403da92372394309fc\"\u003e\u003ccode\u003e63058ab\u003c/code\u003e\u003c/a\u003e Run forever socket close fix (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1015\"\u003e#1015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/6861ee417b65c183a81671bc57cace26c9c7ee29\"\u003e\u003ccode\u003e6861ee4\u003c/code\u003e\u003c/a\u003e Use ipaddress module for no_proxy parsing (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1033\"\u003e#1033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/729bdb8fc063397d298261ed6f2288f272b7f6de\"\u003e\u003ccode\u003e729bdb8\u003c/code\u003e\u003c/a\u003e Coverage improvements (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1035\"\u003e#1035\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/f22579afed961d89a306d0018f373922bf567d22\"\u003e\u003ccode\u003ef22579a\u003c/code\u003e\u003c/a\u003e Linting improvements (\u003ca href=\"https://redirect.github.com/websocket-client/websocket-client/issues/1034\"\u003e#1034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/9564030bed1112497bf1c879673870419365a064\"\u003e\u003ccode\u003e9564030\u003c/code\u003e\u003c/a\u003e Change echo URL in docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/c0fe0f7a18867599c9b62fc61f71036a8d5bdfcf\"\u003e\u003ccode\u003ec0fe0f7\u003c/code\u003e\u003c/a\u003e apply black formatting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/813d570fc95114aa48e8ddf8b767390a1a6985f7\"\u003e\u003ccode\u003e813d570\u003c/code\u003e\u003c/a\u003e Resolve all mypy errors, with AI assistance\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/websocket-client/websocket-client/commit/6020f37e784b77f6627b38797595f038aa76f26e\"\u003e\u003ccode\u003e6020f37\u003c/code\u003e\u003c/a\u003e black formatting fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/websocket-client/websocket-client/compare/v1.8.0...v1.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `websockify` from 0.12.0 to 0.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/novnc/websockify/releases\"\u003ewebsockify's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.13.0\u003c/h2\u003e\n\u003ch1\u003eMajor Changes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python \u0026lt; 3.6 has been dropped.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\"\u003eSNI\u003c/a\u003e is enabled when connecting to an SSL target as an SSL client.\u003c/li\u003e\n\u003cli\u003eThe TokenRedis plugin handles namespaces.\u003c/li\u003e\n\u003cli\u003eHeaders are sanitized before being passed to authentication plugins.\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/novnc/websockify/blob/master/CHANGES.txt\"\u003ewebsockify's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.13.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python \u0026lt; 3.6 has been dropped.\u003c/li\u003e\n\u003cli\u003eSNI is enabled when connecting to an SSL target as an SSL client.\u003c/li\u003e\n\u003cli\u003eThe TokenRedis plugin handles namespaces.\u003c/li\u003e\n\u003cli\u003eHeaders are sanitized before being passed to authentication plugins.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/e81894751365afc19fe64fc9d0e5c6fc52655c36\"\u003e\u003ccode\u003ee818947\u003c/code\u003e\u003c/a\u003e websockify 0.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/0d519b9c18139bcdee7f1bdb9dc785be26bdab29\"\u003e\u003ccode\u003e0d519b9\u003c/code\u003e\u003c/a\u003e Fix fake headers dict in tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/187e204ce403e7aac0ea67348eaad012a68f10bb\"\u003e\u003ccode\u003e187e204\u003c/code\u003e\u003c/a\u003e Clear out sensitive fake headers from client\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/417210f2cf8db9cd3cd9d86c45ef954778176b0e\"\u003e\u003ccode\u003e417210f\u003c/code\u003e\u003c/a\u003e Merge branch 'master' of \u003ca href=\"https://github.com/so-saf/websockify\"\u003ehttps://github.com/so-saf/websockify\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/245fd08e52604c76e877c94da1dc286f87c90c75\"\u003e\u003ccode\u003e245fd08\u003c/code\u003e\u003c/a\u003e Use standard line endings in sysloghandler.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/3f205f7cc6131368631c8b0cb17c3aa5689507e9\"\u003e\u003ccode\u003e3f205f7\u003c/code\u003e\u003c/a\u003e drop python\u0026lt;3.6 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/0af3404ec91ae827275af0a8e474add5afffaf81\"\u003e\u003ccode\u003e0af3404\u003c/code\u003e\u003c/a\u003e Add namespace value to TokenRedis source\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/5989d31ebf1a84bc6c6bdb7b32b4a9ea5437f36d\"\u003e\u003ccode\u003e5989d31\u003c/code\u003e\u003c/a\u003e Add namespace value to TokenRedis source\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/b6c02b13e3ce706dff6f96f754ef1682d9062258\"\u003e\u003ccode\u003eb6c02b1\u003c/code\u003e\u003c/a\u003e Include host in TLS setup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/novnc/websockify/commit/f632fa0285181c1ff1a39c9c4b36795e3f6d9373\"\u003e\u003ccode\u003ef632fa0\u003c/code\u003e\u003c/a\u003e Use SSLContext.wrap_context() for SSL/TLS sockets\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/novnc/websockify/compare/v0.12.0...v0.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 44.0.0 to 48.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e48.0.0 - 2026-05-04\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **BACKWARDS INCOMPATIBLE:** Support for Python 3.8 has been removed.\n  ``cryptography`` now requires Python 3.9 or later.\n* **BACKWARDS INCOMPATIBLE:** Loading an X.509 CRL whose inner\n  ``TBSCertList.signature`` algorithm does not match the outer\n  ``signatureAlgorithm`` now raises ``ValueError``. Previously, such CRLs\n  were parsed successfully and only rejected during signature validation.\n* Added support for :doc:`/hazmat/primitives/asymmetric/mlkem` and\n  :doc:`/hazmat/primitives/asymmetric/mldsa` when using OpenSSL 3.5.0 or\n  later, in addition to the existing AWS-LC and BoringSSL support. This means\n  post-quantum algorithms are now available to users of our wheels.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eNote:\u003c/strong\u003e Going forward, we do not guarantee that all functionality\u003cbr /\u003e\nin \u003ccode\u003ecryptography\u003c/code\u003e will be available when building against\u003cbr /\u003e\nOpenSSL. See :doc:\u003ccode\u003e/statements/state-of-openssl\u003c/code\u003e for more information.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v47-0-0:\u003c/p\u003e\n\u003cp\u003e47.0.0 - 2026-04-24\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.8 is deprecated and will be removed in the next\n\u003ccode\u003ecryptography\u003c/code\u003e release.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Support for binary elliptic curves\n(\u003ccode\u003eSECT*\u003c/code\u003e classes) has been removed. These curves are rarely used and\nhave additional security considerations that make them undesirable.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Support for OpenSSL 1.1.x has been removed.\nOpenSSL 3.0.0 or later is now required. LibreSSL, BoringSSL, and AWS-LC\ncontinue to be supported.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Dropped support for LibreSSL \u0026lt; 4.1.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Loading keys with unsupported algorithms or\nkeys with unsupported explicit curve encodings now raises\n:class:\u003ccode\u003e~cryptography.exceptions.UnsupportedAlgorithm\u003c/code\u003e instead of\n\u003ccode\u003eValueError\u003c/code\u003e. This change affects\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_pem_private_key\u003c/code\u003e,\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_der_private_key\u003c/code\u003e,\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_pem_public_key\u003c/code\u003e,\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_der_public_key\u003c/code\u003e,\nand :meth:\u003ccode\u003e~cryptography.x509.Certificate.public_key\u003c/code\u003e when called on\ncertificates with unsupported public key algorithms.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e When parsing elliptic curve private keys, we now\nreject keys that incorrectly encode a private key of the wrong length because\nsuch keys are impossible to process in a constant-time manner. We do not\nbelieve keys with this problem are in wide use, however we may revert this\nchange based on the feedback we receive.\u003c/li\u003e\n\u003cli\u003eDeprecated passing 64-bit (8-byte) and 128-bit (16-byte) keys to\n:class:\u003ccode\u003e~cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES\u003c/code\u003e. In a\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/8e03e30e3aae01632a697e903e3593c924f0139d\"\u003e\u003ccode\u003e8e03e30\u003c/code\u003e\u003c/a\u003e bump for 48.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14796\"\u003e#14796\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/295e0d254ef31ab864730aa41312ec355416ee71\"\u003e\u003ccode\u003e295e0d2\u003c/code\u003e\u003c/a\u003e Add AGENTS.md with CLAUDE.md symlink (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14794\"\u003e#14794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/104a2de19e268a433e6da92be9cb872dcf0003c8\"\u003e\u003ccode\u003e104a2de\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14793\"\u003e#14793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67ec1e51988195e17993d2edef5258b27509b926\"\u003e\u003ccode\u003e67ec1e5\u003c/code\u003e\u003c/a\u003e call check_length early on AesSiv::encrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14792\"\u003e#14792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/b2da57a0d9e4bfd2b95364299091a18f74127b26\"\u003e\u003ccode\u003eb2da57a\u003c/code\u003e\u003c/a\u003e changelog for mldsa/mlkem for openssl (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14791\"\u003e#14791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/3cf44adee25c368d4a136e072fa9f80465d91eb0\"\u003e\u003ccode\u003e3cf44ad\u003c/code\u003e\u003c/a\u003e ML-KEM OpenSSL support (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14781\"\u003e#14781\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2e31639666766f846fbab2c605879db0fa64fe83\"\u003e\u003ccode\u003e2e31639\u003c/code\u003e\u003c/a\u003e ML-DSA OpenSSL support (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14773\"\u003e#14773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/5affe5a286a986fdf512c4a5cb280d28a96c10e3\"\u003e\u003ccode\u003e5affe5a\u003c/code\u003e\u003c/a\u003e fix rust nightly clippy (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14790\"\u003e#14790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2e73ca448eaf64b6f0d4ffbb794cf96170cef5ec\"\u003e\u003ccode\u003e2e73ca4\u003c/code\u003e\u003c/a\u003e bump rust-openssl dep and update EcPoint::mul_generator to mul_generator2 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/82ebd3b9f49d49ad5fd8b4b1f1dd02487b6e1466\"\u003e\u003ccode\u003e82ebd3b\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14785\"\u003e#14785\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/44.0.0...48.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.25.3 to 1.27.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.25.3...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-docx` from 1.1.2 to 1.2.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-openxml/python-docx/blob/master/HISTORY.rst\"\u003epython-docx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e1.2.0 (2025-06-16)\n++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for comments\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8, add testing for Python 3.13\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/e45454602b53e8e572b179ccf1c91093ec9f4ed7\"\u003e\u003ccode\u003ee454546\u003c/code\u003e\u003c/a\u003e release: prepare v1.2.0 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/1fe660198aab18a421c95d019f53b2aa22d2fe2f\"\u003e\u003ccode\u003e1fe6601\u003c/code\u003e\u003c/a\u003e build: small adjustments for tox\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/4fbe1f684e08aa7eebb0ce6bfedfce512b5c95a2\"\u003e\u003ccode\u003e4fbe1f6\u003c/code\u003e\u003c/a\u003e docs: add Comments docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/a809d6cc8aec18648850d8b94d554f05621e433a\"\u003e\u003ccode\u003ea809d6c\u003c/code\u003e\u003c/a\u003e comments: add Comment.text\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/e3a321d26195fdd6e368f59b63be06b1277dac14\"\u003e\u003ccode\u003ee3a321d\u003c/code\u003e\u003c/a\u003e comments: add Run.mark_comment_range()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/af3b973dd2c938f6851537978fe76f4f5e91dcc9\"\u003e\u003ccode\u003eaf3b973\u003c/code\u003e\u003c/a\u003e comments: add Document.add_comment()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/66da52204db395466cc7ea033af0f5bffd228953\"\u003e\u003ccode\u003e66da522\u003c/code\u003e\u003c/a\u003e xfail: acceptance test for Document.add_comment()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/761f4ccd7751afeeaa5fff5c6f47325c3e0970fa\"\u003e\u003ccode\u003e761f4cc\u003c/code\u003e\u003c/a\u003e comments: add Comment.author, .initials setters\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/8ac9fc4f6b50b9b7f208974e853f1995d63a834a\"\u003e\u003ccode\u003e8ac9fc4\u003c/code\u003e\u003c/a\u003e comments: add Comments.add_comment()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-openxml/python-docx/commit/d360409273a9fdfd2d6a26a7f35b8f3bfc781f04\"\u003e\u003ccode\u003ed360409\u003c/code\u003e\u003c/a\u003e xfail: acceptance test for Comment mutations\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-openxml/python-docx/compare/v1.1.2...v1.2.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/yourhq/yourhq/pull/45","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/yourhq%2Fyourhq/issues/45","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/45/packages"}},{"old_version":"1.26.5","new_version":"1.26.7","update_type":"patch","path":null,"pr_created_at":"2026-05-11T09:54:10.000Z","version_change":"1.26.5 → 1.26.7","issue":{"uuid":"4419796980","node_id":"PR_kwDOSaLNIs7aMcVi","number":1,"state":"closed","title":"chore(deps): Bump pymupdf from 1.26.5 to 1.26.7","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-12T01:47:12.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-11T09:54:10.000Z","updated_at":"2026-05-12T01:47:14.000Z","time_to_close":57182,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","packages":[{"name":"pymupdf","old_version":"1.26.5","new_version":"1.26.7","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.26.5 to 1.26.7.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.26.7 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on pypi.org and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e[Linux-aarch64 wheels will be built and uploaded later.]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.26.7\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse MuPDF-1.26.12.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRetrospectively mark \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4756\"\u003e#4756\u003c/a\u003e as fixed in 1.26.6.\u003c/li\u003e\n\u003cli\u003eImproved safety of \u003ccode\u003epymupdf embed-extract\u003c/code\u003e. This now refuses to write to\nan existing file or outside current directory, unless \u003ccode\u003e-output\u003c/code\u003e or new flag\n\u003ccode\u003e-unsafe\u003c/code\u003e is specified.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.26.6 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on pypi.org and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e[Linux-aarch64 wheels will be built and uploaded later.]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.26.6\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.26.11.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupported Python versions are now 3.10-3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4699\"\u003e#4699\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4712\"\u003e#4712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4720\"\u003e#4720\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4742\"\u003e#4742\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4746\"\u003e#4746\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/8264a4b3798d06ec44af2e0e9d2a13abbc94e97d\"\u003e\u003ccode\u003e8264a4b\u003c/code\u003e\u003c/a\u003e tests/test_4767.py: test_4767() disable on github/windows/cibuildwheel.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e68755ff3fcf93b240a6ba41046fe34be33905d8\"\u003e\u003ccode\u003ee68755f\u003c/code\u003e\u003c/a\u003e setup.py changes.txt: upgrade to mupdf-1.26.12 by default.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c0e37f84c83d189a00467506573c21b34b4b6944\"\u003e\u003ccode\u003ec0e37f8\u003c/code\u003e\u003c/a\u003e .github/workflows: cope with end of life of macos-13.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1084c91bdedea2ebae144eb014a1519eb55ed7a2\"\u003e\u003ccode\u003e1084c91\u003c/code\u003e\u003c/a\u003e Docs: Fixes search path for sub-directory paths.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cb7c15cc76ead20c7cb14d5dfcac59d630faeabd\"\u003e\u003ccode\u003ecb7c15c\u003c/code\u003e\u003c/a\u003e Docs: updates ko .mo files.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/715b7c1fd24af4ecafb5b0e60972477c87321138\"\u003e\u003ccode\u003e715b7c1\u003c/code\u003e\u003c/a\u003e Updates language toggle to add Korean option\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/caa8af770156119c799d6fcadbf61e528ed5ee80\"\u003e\u003ccode\u003ecaa8af7\u003c/code\u003e\u003c/a\u003e Adds missing translations for pixmap.po\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/83e3a47497882ce7670f7afd8f33d39c65c44542\"\u003e\u003ccode\u003e83e3a47\u003c/code\u003e\u003c/a\u003e Code syntax error updates.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a22f1216905098b90883706630172696e2850e90\"\u003e\u003ccode\u003ea22f121\u003c/code\u003e\u003c/a\u003e Fix Korean translation errors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bd48f16b278e70e69bd52f3e7f7387cb92973596\"\u003e\u003ccode\u003ebd48f16\u003c/code\u003e\u003c/a\u003e Fix Korean translation errors in tutorial.po\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.5...1.26.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e","html_url":"https://github.com/scalefirstai/QuantumCache/pull/1","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/scalefirstai%2FQuantumCache/issues/1","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1/packages"}},{"old_version":"\u003c2,\u003e=1.24","new_version":"\u003e=1.27.2.3,\u003c2","update_type":null,"path":"/backend","pr_created_at":"2026-05-11T04:59:56.000Z","version_change":"\u003c2,\u003e=1.24 → \u003e=1.27.2.3,\u003c2","issue":{"uuid":"4418185719","node_id":"PR_kwDORlwKcs7aHOV2","number":24,"state":"closed","title":"chore(deps): update pymupdf requirement from \u003c2,\u003e=1.24 to \u003e=1.27.2.3,\u003c2 in /backend","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-12T02:17:54.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-11T04:59:56.000Z","updated_at":"2026-05-12T02:18:04.000Z","time_to_close":76678,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"pymupdf","old_version":"\u003c2,\u003e=1.24","new_version":"\u003e=1.27.2.3,\u003c2","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":"/backend","ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.0...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/Absence0760/project-account-payables/pull/24","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Absence0760%2Fproject-account-payables/issues/24","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/24/packages"}},{"old_version":"1.24.11","new_version":"1.27.2.3","update_type":"minor","path":"/ingest","pr_created_at":"2026-05-07T03:43:44.000Z","version_change":"1.24.11 → 1.27.2.3","issue":{"uuid":"4396021832","node_id":"PR_kwDOSWewT87ZAL96","number":8,"state":"closed","title":"build(deps): Bump pymupdf from 1.24.11 to 1.27.2.3 in /ingest","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-07T04:02:35.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-07T03:43:44.000Z","updated_at":"2026-05-07T04:02:42.000Z","time_to_close":1131,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Bump","packages":[{"name":"pymupdf","old_version":"1.24.11","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":"/ingest","ecosystem":"pip"},"body":"Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.24.11 to 1.27.2.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.11...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/afly007/rag-docs/pull/8","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/afly007%2Frag-docs/issues/8","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/8/packages"}},{"old_version":"1.24.0","new_version":"1.27.2.3","update_type":"minor","path":"/backend","pr_created_at":"2026-05-02T04:31:18.000Z","version_change":"1.24.0 → 1.27.2.3","issue":{"uuid":"4367912780","node_id":"PR_kwDOSSEpB87Xl_Fc","number":12,"state":"closed","title":"chore(deps)(deps): bump the python-minor-and-patch group in /backend with 19 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-02T04:45:50.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-02T04:31:18.000Z","updated_at":"2026-05-02T04:45:52.000Z","time_to_close":872,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps): bump","group_name":"python-minor-and-patch","update_count":19,"packages":[{"name":"fastapi","old_version":"0.104.1","new_version":"0.136.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.24.0","new_version":"0.46.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydantic","old_version":"2.5.0","new_version":"2.13.3","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.1.0","new_version":"2.14.0","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"sqlalchemy","old_version":"2.0.23","new_version":"2.0.49","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"alembic","old_version":"1.12.1","new_version":"1.18.4","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"psycopg2-binary","old_version":"2.9.9","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"asyncpg","old_version":"0.29.0","new_version":"0.31.0","repository_url":"https://github.com/MagicStack/asyncpg"},{"name":"python-jose","old_version":"3.3.0","new_version":"3.5.0","repository_url":"https://github.com/mpdavis/python-jose"},{"name":"python-multipart","old_version":"0.0.6","new_version":"0.0.27","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"python-levenshtein","old_version":"0.23.0","new_version":"0.27.3","repository_url":"https://github.com/rapidfuzz/python-Levenshtein"},{"name":"python-docx","old_version":"1.1.0","new_version":"1.2.0","repository_url":"https://github.com/python-openxml/python-docx"},{"name":"openpyxl","old_version":"3.1.2","new_version":"3.1.5"},{"name":"pymupdf","old_version":"1.24.0","new_version":"1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"beautifulsoup4","old_version":"4.12.2","new_version":"4.14.3"},{"name":"markdown","old_version":"3.5.1","new_version":"3.10.2","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"httpx","old_version":"0.25.2","new_version":"0.28.1","repository_url":"https://github.com/encode/httpx"},{"name":"python-dotenv","old_version":"1.0.0","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"loguru","old_version":"0.7.2","new_version":"0.7.3","repository_url":"https://github.com/Delgan/loguru"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps the python-minor-and-patch group in /backend with 19 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.104.1` | `0.136.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.24.0` | `0.46.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.5.0` | `2.13.3` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.1.0` | `2.14.0` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.23` | `2.0.49` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.12.1` | `1.18.4` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.9` | `2.9.12` |\n| [asyncpg](https://github.com/MagicStack/asyncpg) | `0.29.0` | `0.31.0` |\n| [python-jose](https://github.com/mpdavis/python-jose) | `3.3.0` | `3.5.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.6` | `0.0.27` |\n| [python-levenshtein](https://github.com/rapidfuzz/python-Levenshtein) | `0.23.0` | `0.27.3` |\n| [python-docx](https://github.com/python-openxml/python-docx) | `1.1.0` | `1.2.0` |\n| [openpyxl](https://openpyxl.readthedocs.io) | `3.1.2` | `3.1.5` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.24.0` | `1.27.2.3` |\n| [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) | `4.12.2` | `4.14.3` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.5.1` | `3.10.2` |\n| [httpx](https://github.com/encode/httpx) | `0.25.2` | `0.28.1` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.0.0` | `1.2.2` |\n| [loguru](https://github.com/Delgan/loguru) | `0.7.2` | `0.7.3` |\n\nUpdates `fastapi` from 0.104.1 to 0.136.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.136.1\u003c/h2\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Update Pydantic v2 code to address deprecations. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15101\"\u003e#15101\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔨 Tweak translation script. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15174\"\u003e#15174\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump mkdocs-material from 9.7.1 to 9.7.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15408\"\u003e#15408\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump inline-snapshot from 0.31.1 to 0.32.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15409\"\u003e#15409\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pytest-codspeed from 4.3.0 to 4.4.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15407\"\u003e#15407\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pytest-cov from 7.0.0 to 7.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15406\"\u003e#15406\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.14.1 to 3.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15405\"\u003e#15405\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump mypy from 1.19.1 to 1.20.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15410\"\u003e#15410\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump python-dotenv from 1.2.1 to 1.2.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15400\"\u003e#15400\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump starlette from 0.52.1 to 1.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15397\"\u003e#15397\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pygithub from 2.8.1 to 2.9.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15396\"\u003e#15396\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pyjwt from 2.12.0 to 2.12.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15393\"\u003e#15393\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump zizmor from 1.23.1 to 1.24.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15394\"\u003e#15394\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump strawberry-graphql from 0.312.3 to 0.314.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15395\"\u003e#15395\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump python-multipart from 0.0.22 to 0.0.26. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15360\"\u003e#15360\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump authlib from 1.6.9 to 1.6.11. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15373\"\u003e#15373\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump aiohttp from 3.13.3 to 3.13.4. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15282\"\u003e#15282\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pygments from 2.19.2 to 2.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15263\"\u003e#15263\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pymdown-extensions from 10.20.1 to 10.21.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15391\"\u003e#15391\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pillow from 12.1.1 to 12.2.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15333\"\u003e#15333\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pytest from 9.0.2 to 9.0.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15334\"\u003e#15334\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/upload-artifact from 7.0.0 to 7.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15374\"\u003e#15374\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/cache from 5.0.4 to 5.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15385\"\u003e#15385\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove Zuplo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15369\"\u003e#15369\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove Speakeasy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15368\"\u003e#15368\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15316\"\u003e#15316\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.136.0\u003c/h2\u003e\n\u003ch3\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆️ Support free-threaded Python 3.14t. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15149\"\u003e#15149\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.135.4\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔥 Remove April Fool's \u003ccode\u003e@app.vibe()\u003c/code\u003e 🤪. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15363\"\u003e#15363\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump cryptography from 46.0.5 to 46.0.7. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15314\"\u003e#15314\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump strawberry-graphql from 0.307.1 to 0.312.3. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15309\"\u003e#15309\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔨 Add pre-commit hook to ensure latest release header has date. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15293\"\u003e#15293\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.135.3\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/fastapi/fastapi/commit/e54e5a8980ffa6d7ff68ee7b25a1c46036375521\"\u003e\u003ccode\u003ee54e5a8\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9a8a5fd99902c3b80d4cc94b85e120e2b808825f\"\u003e\u003ccode\u003e9a8a5fd\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7815a32f2ed177b8b786a48b3e0712c05b5c644f\"\u003e\u003ccode\u003e7815a32\u003c/code\u003e\u003c/a\u003e ⬆️ Update Pydantic v2 code to address deprecations (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15101\"\u003e#15101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ef1c927b0558d414e199a666833942a6fabb3a51\"\u003e\u003ccode\u003eef1c927\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/38039e12a86e67f2001b9b7d96c219691d6cb4af\"\u003e\u003ccode\u003e38039e1\u003c/code\u003e\u003c/a\u003e 🔨 Tweak translation script (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15174\"\u003e#15174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4fa826ce0a3b16884a04f51e5aac95d01790b599\"\u003e\u003ccode\u003e4fa826c\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c39415673e621665fdb7bbdde69beba7eb1dfd12\"\u003e\u003ccode\u003ec394156\u003c/code\u003e\u003c/a\u003e ⬆ Bump mkdocs-material from 9.7.1 to 9.7.6 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15408\"\u003e#15408\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ae230ad2f9d90a4e3f6222ff1a5d6e8da41ec0ad\"\u003e\u003ccode\u003eae230ad\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/d9eb39d1a1bf2f6e6e5d3a55088f61c712cb864e\"\u003e\u003ccode\u003ed9eb39d\u003c/code\u003e\u003c/a\u003e ⬆ Bump inline-snapshot from 0.31.1 to 0.32.6 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15409\"\u003e#15409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/4f8b5d14d324ae8e15cfae8d85adb4186d4c2175\"\u003e\u003ccode\u003e4f8b5d1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.104.1...0.136.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.24.0 to 0.46.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio 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/2917\"\u003eKludex/uvicorn#2917\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.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.45.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware 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/2903\"\u003eKludex/uvicorn#2903\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2905\"\u003eKludex/uvicorn#2905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively 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/2907\"\u003eKludex/uvicorn#2907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config 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/2906\"\u003eKludex/uvicorn#2906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert empty context for ASGI runs 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/2911\"\u003eKludex/uvicorn#2911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context 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/2912\"\u003eKludex/uvicorn#2912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2913\"\u003eKludex/uvicorn#2913\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/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2870\"\u003eKludex/uvicorn#2870\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.44.0...0.45.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.44.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplement websocket keepalive pings for websockets-sansio 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/2888\"\u003eKludex/uvicorn#2888\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.43.0...0.44.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.43.0...0.44.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.43.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEmit \u003ccode\u003ehttp.disconnect\u003c/code\u003e ASGI \u003ccode\u003ereceive()\u003c/code\u003e event on server shutting down for streaming responses (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse native \u003ccode\u003econtext\u003c/code\u003e parameter for \u003ccode\u003ecreate_task\u003c/code\u003e on Python 3.11+ (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2859\"\u003e#2859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop cast in ASGI types (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2875\"\u003e#2875\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.42.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for request body accumulation to avoid O(n^2) allocation on fragmented bodies (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2845\"\u003e#2845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\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's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.45.0 (April 21, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2905\"\u003e#2905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2913\"\u003e#2913\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Explicitly start ASGI run with empty context\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2903\"\u003e#2903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.44.0 (April 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement websocket keepalive pings for websockets-sansio (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2888\"\u003e#2888\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.43.0 (April 3, 2026)\u003c/h2\u003e\n\u003cp\u003eYou can quit Uvicorn now. We heard you, \u003ca href=\"https://github.com/pamelafox\"\u003e\u003ccode\u003e@​pamelafox\u003c/code\u003e\u003c/a\u003e - all 47 of your Ctrl+C's (thanks for flagging it, and thanks to \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e for the fix 🙏). \u003ca href=\"https://x.com/pamelafox/status/2039097686155227623\"\u003eSee the tweet\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEmit \u003ccode\u003ehttp.disconnect\u003c/code\u003e ASGI \u003ccode\u003ereceive()\u003c/code\u003e event on server shutting down for streaming responses (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse native \u003ccode\u003econtext\u003c/code\u003e parameter for \u003ccode\u003ecreate_task\u003c/code\u003e on Python 3.11+ (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2859\"\u003e#2859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop cast in ASGI types (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2875\"\u003e#2875\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.42.0 (March 16, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for request body accumulation to avoid O(n^2) allocation on fragmented bodies (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2845\"\u003e#2845\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/b224045f5900b7f766743bcb16ba9fc3adea2606\"\u003e\u003ccode\u003eb224045\u003c/code\u003e\u003c/a\u003e Version 0.46.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2918\"\u003e#2918\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7375b5bf66d962186d663e85615d4b4d956bf880\"\u003e\u003ccode\u003e7375b5b\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/d438fb16fe2d23c7bbc2ca7094645cff1f116458\"\u003e\u003ccode\u003ed438fb1\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3e6b96446653d0156434bce529a14c80764c9eda\"\u003e\u003ccode\u003e3e6b964\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2c423bd82be169459ea254a61476de34767e0326\"\u003e\u003ccode\u003e2c423bd\u003c/code\u003e\u003c/a\u003e Version 0.45.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7f027f8e25e47668a9c2ce8b5c21b35054c48d02\"\u003e\u003ccode\u003e7f027f8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/73a80c3cc87de269ed016e584a25e585ae6f2b44\"\u003e\u003ccode\u003e73a80c3\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45c0b568d38e9bf4f2f036bc2d79eb98b0e72f72\"\u003e\u003ccode\u003e45c0b56\u003c/code\u003e\u003c/a\u003e Revert empty context for ASGI runs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/850d92656de0cb5859ee5f6ba252e19ad3d38989\"\u003e\u003ccode\u003e850d926\u003c/code\u003e\u003c/a\u003e Raise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2906\"\u003e#2906\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/fdcacb4b83bc686ea1ba9e50ffe5b8cfe49b3e00\"\u003e\u003ccode\u003efdcacb4\u003c/code\u003e\u003c/a\u003e Accept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.24.0...0.46.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.5.0 to 2.13.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0 2026-04-13\u003c/h2\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e) are also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release contains the updated \u003ccode\u003epydantic.v1\u003c/code\u003e namespace, matching version 1.10.26 which includes support for Python 3.14.\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eSee the beta releases for all changes sinces 2.12.\u003c/p\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd zizmor for GitHub Actions workflow linting by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13039\"\u003e#13039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate jiter to v0.14.0 to fix a segmentation fault on musl Linux by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13064\"\u003e#13064\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.1\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\nSeveral minor changes (considered non-breaking changes according to our \u003ca href=\"https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2\"\u003eversioning policy\u003c/a\u003e)\nare also included in this release. Make sure to look into them before upgrading.\u003c/p\u003e\n\u003cp\u003eThis release contains the updated \u003ccode\u003epydantic.v1\u003c/code\u003e namespace, matching version 1.10.26 which includes support for Python 3.14.\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003cp\u003eSee the beta releases for all changes sinces 2.12.\u003c/p\u003e\n\u003ch4\u003eNew Features\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAllow default factories of private attributes to take validated model data by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13013\"\u003e#13013\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eChanges\u003c/h4\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/9e9a11132c980c4ec84ff6d2df06d4c1a55ca8f3\"\u003e\u003ccode\u003e9e9a111\u003c/code\u003e\u003c/a\u003e Fix backported test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1ec8c6aa0cae1c78409c6f31af738a24e16c7124\"\u003e\u003ccode\u003e1ec8c6a\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/fb4f2044436e9fa4ff9745479ce263016a99c4d6\"\u003e\u003ccode\u003efb4f204\u003c/code\u003e\u003c/a\u003e Handle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/ca3ddd1149bd3b14273922a29da174804496a055\"\u003e\u003ccode\u003eca3ddd1\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/000e823a3ab7545b0c6064fde34effdcd02044ab\"\u003e\u003ccode\u003e000e823\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/d45d8be3ffb6dfc6d0c64da6980140c91ff841fb\"\u003e\u003ccode\u003ed45d8be\u003c/code\u003e\u003c/a\u003e Prepare release 2.13.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/54aca609ce58e73dfe1c681d93432fbe3a4621da\"\u003e\u003ccode\u003e54aca60\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/46bf4fa648af3a1fbf4603a37f210e9d9c618357\"\u003e\u003ccode\u003e46bf4fa\u003c/code\u003e\u003c/a\u003e Fix Pydantic release workflow (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13067\"\u003e#13067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/1b359edab09c623464d23c6fd2503ae5ff276d43\"\u003e\u003ccode\u003e1b359ed\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13065\"\u003e#13065\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b1bf19445d8ac144a7a0e82674d2d87eebab6c18\"\u003e\u003ccode\u003eb1bf194\u003c/code\u003e\u003c/a\u003e Fix model equality when using runtime \u003ccode\u003eextra\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/pydantic/pydantic/issues/13062\"\u003e#13062\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.5.0...v2.13.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.1.0 to 2.14.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix parsing env vars into Optional Strict types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/792\"\u003epydantic/pydantic-settings#792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with mutually recursive models in CLI by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/794\"\u003epydantic/pydantic-settings#794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env_file from model_config ignored in CliApp.run() (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/795\"\u003e#795\u003c/a\u003e) by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/796\"\u003epydantic/pydantic-settings#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/798\"\u003epydantic/pydantic-settings#798\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/801\"\u003epydantic/pydantic-settings#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump samuelcolvin/check-python-version from 4.1 to 5 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/803\"\u003epydantic/pydantic-settings#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 4 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/804\"\u003epydantic/pydantic-settings#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 5 to 7 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/805\"\u003epydantic/pydantic-settings#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/806\"\u003epydantic/pydantic-settings#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore chardet and group GitHub Actions in Dependabot by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/808\"\u003epydantic/pydantic-settings#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 4 to 8 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/809\"\u003epydantic/pydantic-settings#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/810\"\u003epydantic/pydantic-settings#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport reading .env files from FIFOs (e.g. 1Password Environments) by \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AliasChoices ignored when changing provider priority by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/813\"\u003epydantic/pydantic-settings#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve KeyError in run_subcommand for underscore field names by \u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/814\"\u003epydantic/pydantic-settings#814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLiteral[numeric Enum]\u003c/code\u003e coercion for CLI and env vars by \u003ca href=\"https://github.com/m9810223\"\u003e\u003ccode\u003e@​m9810223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/811\"\u003epydantic/pydantic-settings#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nested discriminated unions not discovered by env/CLI providers by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/816\"\u003epydantic/pydantic-settings#816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/820\"\u003epydantic/pydantic-settings#820\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCLI ensure env nested max split internally. by \u003ca href=\"https://github.com/kschwab\"\u003e\u003ccode\u003e@​kschwab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/821\"\u003epydantic/pydantic-settings#821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/824\"\u003epydantic/pydantic-settings#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eboto3-stubs\u003c/code\u003e to \u003ccode\u003etypes-boto3\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/831\"\u003epydantic/pydantic-settings#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI not recognizing field name with validate_by_name and AliasChoices by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/826\"\u003epydantic/pydantic-settings#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow customisation of the dotevn setting source to filter variables by \u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/833\"\u003epydantic/pydantic-settings#833\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce yamlfmt by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/836\"\u003epydantic/pydantic-settings#836\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump boto3 from 1.42.82 to 1.42.83 in the python-packages group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/837\"\u003epydantic/pydantic-settings#837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce zizmor by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/838\"\u003epydantic/pydantic-settings#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CliPositionalArg[list[CustomType]] crash for custom types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/839\"\u003epydantic/pydantic-settings#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/842\"\u003epydantic/pydantic-settings#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/844\"\u003epydantic/pydantic-settings#844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/847\"\u003epydantic/pydantic-settings#847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to \u003ccode\u003ejson_schema_extra\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/843\"\u003epydantic/pydantic-settings#843\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/848\"\u003epydantic/pydantic-settings#848\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/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.0\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression for bool fields since 2.13.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/784\"\u003epydantic/pydantic-settings#784\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with self-referential models in CliApp by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/783\"\u003epydantic/pydantic-settings#783\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3\"\u003e\u003ccode\u003e8916bee\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/848\"\u003e#848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5\"\u003e\u003ccode\u003e39e551c\u003c/code\u003e\u003c/a\u003e Fix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to `json_schema_...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14\"\u003e\u003ccode\u003e9ed7f48\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/847\"\u003e#847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9\"\u003e\u003ccode\u003e617c690\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/844\"\u003e#844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/577c05f7e8ac25904da2381db51ed4ddd4b3e4fe\"\u003e\u003ccode\u003e577c05f\u003c/code\u003e\u003c/a\u003e Add note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/842\"\u003e#842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/2355bc54e9d442ca7916f02de28d0c936e75441c\"\u003e\u003ccode\u003e2355bc5\u003c/code\u003e\u003c/a\u003e Fix CliPositionalArg[list[CustomType]] crash for custom types (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/839\"\u003e#839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/16bd6fd230d6280d52db6ce2a0ffef8f908cc89d\"\u003e\u003ccode\u003e16bd6fd\u003c/code\u003e\u003c/a\u003e Introduce zizmor (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/838\"\u003e#838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/df8b239fe09ba712767bdf378bc90627df375f04\"\u003e\u003ccode\u003edf8b239\u003c/code\u003e\u003c/a\u003e Bump boto3 from 1.42.82 to 1.42.83 in the python-packages group (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/837\"\u003e#837\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/c5401a27999cd6c0e93925deb0660cd51013c8b1\"\u003e\u003ccode\u003ec5401a2\u003c/code\u003e\u003c/a\u003e Introduce yamlfmt (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/836\"\u003e#836\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/953e28e6cfe9a9e536375d771a4ffd48535a4ab2\"\u003e\u003ccode\u003e953e28e\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/833\"\u003e#833\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.1.0...v2.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.23 to 2.0.49\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.49\u003c/h1\u003e\n\u003cp\u003eReleased: April 3, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003e_orm.Session.get()\u003c/code\u003e would bypass the identity map\nand emit unnecessary SQL when \u003ccode\u003ewith_for_update=False\u003c/code\u003e was passed,\nrather than treating it equivalently to the default of \u003ccode\u003eNone\u003c/code\u003e.\nPull request courtesy of Joshua Swanson.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13176\"\u003e#13176\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where chained \u003ccode\u003e_orm.joinedload()\u003c/code\u003e options would not be\napplied correctly when the final relationship in the chain is declared on a\nbase mapper and accessed through a subclass mapper in a\n\u003ccode\u003e_orm.with_polymorphic()\u003c/code\u003e query. The path registry now correctly\ncomputes the natural path when a property declared on a base class is\naccessed through a path containing a subclass mapper, ensuring the loader\noption can be located during query compilation.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13193\"\u003e#13193\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug] [inheritance]\u003c/strong\u003e Fixed issue where using \u003ccode\u003e_orm.Load.options()\u003c/code\u003e to apply a chained loader\noption such as \u003ccode\u003e_orm.joinedload()\u003c/code\u003e or \u003ccode\u003e_orm.selectinload()\u003c/code\u003e with\n\u003ccode\u003e_orm.PropComparator.of_type()\u003c/code\u003e for a polymorphic relationship would\nnot generate the necessary clauses for the polymorphic subclasses. The\npolymorphic loading strategy is now correctly propagated when using a call\nsuch as \u003ccode\u003ejoinedload(A.b).options(joinedload(B.c.of_type(poly)))\u003c/code\u003e to match\nthe behavior of direct chaining e.g.\n\u003ccode\u003ejoinedload(A.b).joinedload(B.c.of_type(poly))\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13202\"\u003e#13202\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug] [inheritance]\u003c/strong\u003e Fixed issue where using chained loader options such as\n\u003ccode\u003e_orm.selectinload()\u003c/code\u003e after \u003ccode\u003e_orm.joinedload()\u003c/code\u003e with\n\u003ccode\u003e_orm.PropComparator.of_type()\u003c/code\u003e for a polymorphic relationship would\nnot properly apply the chained loader option. The loader option is now\ncorrectly applied when using a call such as\n\u003ccode\u003ejoinedload(A.b.of_type(poly)).selectinload(poly.SubClass.c)\u003c/code\u003e to eagerly\nload related objects.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13209\"\u003e#13209\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etyping\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e[typing] [bug]\u003c/strong\u003e Fixed a typing issue where the typed members of :data:\u003ccode\u003e.func\u003c/code\u003e would return\nthe appropriate class of the same name, however this creates an issue for\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` from 1.12.1 to 1.18.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.18.4\u003c/h1\u003e\n\u003cp\u003eReleased: February 10, 2026\u003c/p\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [operations]\u003c/strong\u003e Reverted the behavior of \u003ccode\u003eOperations.add_column()\u003c/code\u003e that would\nautomatically render the \u0026quot;PRIMARY KEY\u0026quot; keyword inline when a\n\u003ccode\u003eColumn\u003c/code\u003e with \u003ccode\u003eprimary_key=True\u003c/code\u003e is added. The automatic\nbehavior, added in version 1.18.2, is now opt-in via the new\n\u003ccode\u003eOperations.add_column.inline_primary_key\u003c/code\u003e parameter. This\nchange restores the ability to render a PostgreSQL SERIAL column, which is\nrequired to be \u003ccode\u003eprimary_key=True\u003c/code\u003e, while not impacting the ability to\nrender a separate primary key constraint. This also provides consistency\nwith the \u003ccode\u003eOperations.add_column.inline_references\u003c/code\u003e parameter and\ngives users explicit control over SQL generation.\u003c/p\u003e\n\u003cp\u003eTo render PRIMARY KEY inline, use the\n\u003ccode\u003eOperations.add_column.inline_primary_key\u003c/code\u003e parameter set to\n\u003ccode\u003eTrue\u003c/code\u003e:\u003c/p\u003e\n\u003cp\u003eop.add_column(\n\u0026quot;my_table\u0026quot;,\nColumn(\u0026quot;id\u0026quot;, Integer, primary_key=True),\ninline_primary_key=True\n)References: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1232\"\u003e#1232\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e1.18.3\u003c/h1\u003e\n\u003cp\u003eReleased: January 29, 2026\u003c/p\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [autogenerate]\u003c/strong\u003e Fixed regression in version 1.18.0 due to \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1771\"\u003e#1771\u003c/a\u003e where autogenerate\nwould raise \u003ccode\u003eNoReferencedTableError\u003c/code\u003e when a foreign key constraint\nreferenced a table that was not part of the initial table load, including\ntables filtered out by the\n\u003ccode\u003eEnvironmentContext.configure.include_name\u003c/code\u003e callable or tables\nin remote schemas that were not included in the initial reflection run.\u003c/p\u003e\n\u003cp\u003eThe change in \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1771\"\u003e#1771\u003c/a\u003e was a performance optimization that eliminated\nadditional reflection queries for tables that were only referenced by\nforeign keys but not explicitly included in the main reflection run.\nHowever, this optimization inadvertently removed the creation of\n\u003ccode\u003eTable\u003c/code\u003e objects for these referenced tables, causing autogenerate\nto fail when processing foreign key constraints that pointed to them.\u003c/p\u003e\n\u003cp\u003eThe fix creates placeholder \u003ccode\u003eTable\u003c/code\u003e objects for foreign key targets\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.9 to 2.9.12\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWheel package bundled with PostgreSQL 16 libpq in order to add support for\nrecent features, such as \u003ccode\u003esslcertmode\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.7\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix propagation of exceptions raised during module initialization\n(:ticket:\u003ccode\u003e[#1598](https://github.com/psycopg/psycopg2/issues/1598)\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/psycopg2/commit/3a6d9d6ddc6b53eaa80b712f5fa6b23abbdc38db\"\u003e\u003ccode\u003e3a6d9d6\u003c/code\u003e\u003c/a\u003e ci: include almalinux in whieel building\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/ebca6bf0f86bc6cbdc86de1eb3a53eaf49966d86\"\u003e\u003ccode\u003eebca6bf\u003c/code\u003e\u003c/a\u003e chore: bump to version 3.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/0196f02cc9512df8de3c941f87d27bda98f9f7af\"\u003e\u003ccode\u003e0196f02\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/cibuildwheel from 3.3.1 to 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d157bdc2235a42dc1742936dbb0f5cfc8e4d2eb7\"\u003e\u003ccode\u003ed157bdc\u003c/code\u003e\u003c/a\u003e build(deps): bump docker/setup-qemu-action from 3 to 4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/7fccc0f5066a40dea530512abbf02621f4182b81\"\u003e\u003ccode\u003e7fccc0f\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d52a61eb2e6095fc1b9891bfcca44ebfac509e55\"\u003e\u003ccode\u003ed52a61e\u003c/code\u003e\u003c/a\u003e chore: bump dependency libraries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/b231d726a01d55e07ec3620b2b82f4a2da37ba62\"\u003e\u003ccode\u003eb231d72\u003c/code\u003e\u003c/a\u003e chore: fix building binary images\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/6d76e8479f0f522c2e07ce0e2701030d8fd63785\"\u003e\u003ccode\u003e6d76e84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg2/issues/1836\"\u003e#1836\u003c/a\u003e from psycopg/fix-1835\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f7e314c7ab418ab9b9956e694956089a49c5c3b9\"\u003e\u003ccode\u003ef7e314c\u003c/code\u003e\u003c/a\u003e fix: overflow in malformed interval\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/eb905c124b75f2a5183d22177b85af20914b0f17\"\u003e\u003ccode\u003eeb905c1\u003c/code\u003e\u003c/a\u003e docs: replace bare except clause with except Exception\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.9...2.9.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asyncpg` from 0.29.0 to 0.31.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/MagicStack/asyncpg/releases\"\u003easyncpg's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.31.0\u003c/h2\u003e\n\u003cp\u003eEnable Python 3.14 with experimental subinterpreter/freethreading\nsupport.\u003c/p\u003e\n\u003ch1\u003eImprovements\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd Python 3.14 support, experimental subinterpreter/freethreading support (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1279\"\u003e#1279\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 9e42642b)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAvoid performing type introspection on known types (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1243\"\u003e#1243\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 5c9986c4)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMake \u003ccode\u003eprepare()\u003c/code\u003e not use named statements by default when cache is disabled (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1245\"\u003e#1245\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 5b14653e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImplement connection service file functionality (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1223\"\u003e#1223\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/AndrewJackson2020\"\u003e\u003ccode\u003e@​AndrewJackson2020\u003c/code\u003e\u003c/a\u003e in 1d63bb15)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix multi port connection string issue (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1222\"\u003e#1222\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/AndrewJackson2020\"\u003e\u003ccode\u003e@​AndrewJackson2020\u003c/code\u003e\u003c/a\u003e in 01c0db7b)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAvoid leaking connections if _can_use_connection fails (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1269\"\u003e#1269\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/yuliy-openai\"\u003e\u003ccode\u003e@​yuliy-openai\u003c/code\u003e\u003c/a\u003e in e94302d2)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eOther\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for EOL Python 3.8 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1281\"\u003e#1281\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 6c2c4904)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.30.0\u003c/h2\u003e\n\u003cp\u003eSupport Python 3.13 and PostgreSQL 17.\u003c/p\u003e\n\u003ch1\u003eImprovements\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eImplement GSSAPI authentication\n(by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in 1d4e5680 for \u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImplement SSPI authentication\n(by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in 1aab2094 for \u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1128\"\u003e#1128\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd initial typings\n(by \u003ca href=\"https://github.com/bryanforbes\"\u003e\u003ccode\u003e@​bryanforbes\u003c/code\u003e\u003c/a\u003e in d42432bf for \u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAllow building with Cython 3\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/MagicStack/asyncpg/commit/71775a67277fc0aa5bd2b9f15e848826d7078c4d\"\u003e\u003ccode\u003e71775a6\u003c/code\u003e\u003c/a\u003e asyncpg v0.31.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/508cae6441968ef7613a623fece7083cce66c2b3\"\u003e\u003ccode\u003e508cae6\u003c/code\u003e\u003c/a\u003e Test on PostgreSQL 18 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1290\"\u003e#1290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/e534e5f15c73525a6509143b3828335517360f1b\"\u003e\u003ccode\u003ee534e5f\u003c/code\u003e\u003c/a\u003e Bump cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/07fe5122a680f5768e39fc28d68c94b185037a52\"\u003e\u003ccode\u003e07fe512\u003c/code\u003e\u003c/a\u003e Bump pgproto\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/648b35f18199ebf2a30009376a6e9060cf7ad789\"\u003e\u003ccode\u003e648b35f\u003c/code\u003e\u003c/a\u003e Bump Cython to 3.2.1 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1288\"\u003e#1288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/9e42642b9110d206706697921b6e697a0972649d\"\u003e\u003ccode\u003e9e42642\u003c/code\u003e\u003c/a\u003e Add Python 3.14 support, experimental subinterpreter/freethreading support (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/6fe1c494ef5c3069fa9149c48bf9f8f2cd69f95e\"\u003e\u003ccode\u003e6fe1c49\u003c/code\u003e\u003c/a\u003e Move development deps away from extras and into dependency groups (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1280\"\u003e#1280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/7a548166c2b23561915c481bd332013e3a415cfb\"\u003e\u003ccode\u003e7a54816\u003c/code\u003e\u003c/a\u003e Fix a couple of missed Python version guards\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/6c2c4904e61b2cd2f502540730a24e246cff2ebd\"\u003e\u003ccode\u003e6c2c490\u003c/code\u003e\u003c/a\u003e Drop support for EOL Python 3.8 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1281\"\u003e#1281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/4c60ae890d1f3800f889679657357f91a6923568\"\u003e\u003ccode\u003e4c60ae8\u003c/code\u003e\u003c/a\u003e Bump version to 0.31.0.dev0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/MagicStack/asyncpg/compare/v0.29.0...v0.31.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-jose` from 3.3.0 to 3.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mpdavis/python-jose/releases\"\u003epython-jose's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.5.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8\u003c/li\u003e\n\u003cli\u003eAdded support for Python 3.12 \u0026amp; 3.13\u003c/li\u003e\n\u003cli\u003eUpgrade to pyasn1 0.5.1+\u003c/li\u003e\n\u003cli\u003eUpgrade to pytest and other dependencies\u003c/li\u003e\n\u003cli\u003eAdd RTD config file to silence emailed deprecation warnings\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes and Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove get_random_bytes from cryptography backend\u003c/li\u003e\n\u003cli\u003eDo not use \u003ccode\u003eutc_now\u003c/code\u003e on module level\u003c/li\u003e\n\u003cli\u003eRemove key data (sensitive information) from JWKError exceptions\u003c/li\u003e\n\u003cli\u003eAdded possibility to call jwk.construct() with a private RSA key\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://pypi.org/project/python-jose/3.5.0/\"\u003ehttps://pypi.org/project/python-jose/3.5.0/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.4.0\u003c/h2\u003e\n\u003ch3\u003eNews\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.6 and 3.7\u003c/li\u003e\n\u003cli\u003eAdded support for Python 3.10 and 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes and Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating \u003ccode\u003eCryptographyAESKey::encrypt\u003c/code\u003e to generate 96 bit IVs for GCM block\ncipher mode\u003c/li\u003e\n\u003cli\u003eFix for PEM key comparisons caused by line lengths and new lines\u003c/li\u003e\n\u003cli\u003eFix for CVE-2024-33664 - JWE limited to 250KiB\u003c/li\u003e\n\u003cli\u003eFix for CVE-2024-33663 - signing JWT with public key is now forbidden\u003c/li\u003e\n\u003cli\u003eReplace usage of deprecated datetime.utcnow() with datetime.now(UTC)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eHousekeeping\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated Github Actions Workflows\u003c/li\u003e\n\u003cli\u003eUpdated to use tox 4.x\u003c/li\u003e\n\u003cli\u003eRevise codecov integration\u003c/li\u003e\n\u003cli\u003eFixed DeprecationWarnings\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/mpdavis/python-jose/blob/master/CHANGELOG.md\"\u003epython-jose's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.5.0 -- 2025-05-28\u003c/h2\u003e\n\u003ch3\u003eNews\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.8\u003c/li\u003e\n\u003cli\u003eAdded support for Python 3.12 \u0026amp; 3.13\u003c/li\u003e\n\u003cli\u003eUpgrade to pyasn1 0.5.1+\u003c/li\u003e\n\u003cli\u003eUpgrade to pytest and other dependencies\u003c/li\u003e\n\u003cli\u003eAdd RTD config file to silence emailed deprecation warnings\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes and Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove get_random_bytes from cryptography backend\u003c/li\u003e\n\u003cli\u003eDo not use \u003ccode\u003eutc_now\u003c/code\u003e on module level\u003c/li\u003e\n\u003cli\u003eRemove key data (sensitive information) from JWKError exceptions\u003c/li\u003e\n\u003cli\u003eAdded possibility to call jwk.construct() with a private RSA key\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.4.0 -- 2025-02-14\u003c/h2\u003e\n\u003ch3\u003eNews\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove support for Python 3.6 and 3.7\u003c/li\u003e\n\u003cli\u003eAdded support for Python 3.10 and 3.11\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes and Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating \u003ccode\u003eCryptographyAESKey::encrypt\u003c/code\u003e to generate 96 bit IVs for GCM block\ncipher mode\u003c/li\u003e\n\u003cli\u003eFix for PEM key comparisons caused by line lengths and new lines\u003c/li\u003e\n\u003cli\u003eFix for CVE-2024-33664 - JWE limited to 250KiB\u003c/li\u003e\n\u003cli\u003eFix for CVE-2024-33663 - signing JWT with public key is now forbidden\u003c/li\u003e\n\u003cli\u003eReplace usage of deprecated datetime.utcnow() with datetime.now(UTC)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eHousekeeping\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated Github Actions Workflows\u003c/li\u003e\n\u003cli\u003eUpdated to use tox 4.x\u003c/li\u003e\n\u003cli\u003eRevise codecov integration\u003c/li\u003e\n\u003cli\u003eFixed DeprecationWarnings\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/018b310ddb8b50dcfd09a0c152117835a21dd656\"\u003e\u003ccode\u003e018b310\u003c/code\u003e\u003c/a\u003e Prepare release 3.5.0 (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/388\"\u003e#388\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/393c37476c728782dacc41cd79472627a5b198f3\"\u003e\u003ccode\u003e393c374\u003c/code\u003e\u003c/a\u003e Improve jwt.decode key doc (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/198\"\u003e#198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/50d43908ff5d3c6b48017c5d07b3b95c71ed89d9\"\u003e\u003ccode\u003e50d4390\u003c/code\u003e\u003c/a\u003e utils.py: fix types in docstrings for base64url_encode/decode (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/269\"\u003e#269\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/8fd0b6318643edf9a7eee718d7f978fd04345e06\"\u003e\u003ccode\u003e8fd0b63\u003c/code\u003e\u003c/a\u003e Add RTD config file to silence emailed deprecation warnings (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/333\"\u003e#333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/6f03385e538b1fbb231780e149c413f102464f37\"\u003e\u003ccode\u003e6f03385\u003c/code\u003e\u003c/a\u003e Added possibility to call jwk.construct() with a private key (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/2f0aca6e2e43b78b6365a19f95e8a5ec7e02a375\"\u003e\u003ccode\u003e2f0aca6\u003c/code\u003e\u003c/a\u003e Add python_requires arg to setup.cfg (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/273\"\u003e#273\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/895777e04ad9c3f7bb3f8bf4a1196244dc9dbb58\"\u003e\u003ccode\u003e895777e\u003c/code\u003e\u003c/a\u003e Updated pyasn version to match latest (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/338\"\u003e#338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/45bd1248f181f8bef24b12b5b4a6cc262c526413\"\u003e\u003ccode\u003e45bd124\u003c/code\u003e\u003c/a\u003e Update jwk.py (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/328\"\u003e#328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/1f0ae0a208da3950c1fc32b758da7147eb15d072\"\u003e\u003ccode\u003e1f0ae0a\u003c/code\u003e\u003c/a\u003e docs: Fix a few typos (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mpdavis/python-jose/commit/ceaac3665de1ed911884f0d1e96227b0a4ce378e\"\u003e\u003ccode\u003eceaac36\u003c/code\u003e\u003c/a\u003e Do not use \u003ccode\u003eutc_now\u003c/code\u003e on module level (\u003ca href=\"https://redirect.github.com/mpdavis/python-jose/issues/372\"\u003e#372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mpdavis/python-jose/compare/3.3.0...3.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.6 to 0.0.27\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.27\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePass parse offsets via constructors 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/python-multipart/pull/268\"\u003eKludex/python-multipart#268\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd multipart header limits 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/python-multipart/pull/267\"\u003eKludex/python-multipart#267\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/python-multipart/compare/0.0.26...0.0.27\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.26\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSkip preamble before first multipart boundary 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/python-multipart/pull/262\"\u003eKludex/python-multipart#262\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilently discard epilogue data after the closing boundary 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/python-multipart/pull/259\"\u003eKludex/python-multipart#259\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/python...\n\n_Description has been truncated_","html_url":"https://github.com/xr843/buddhist-text-collation/pull/12","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/xr843%2Fbuddhist-text-collation/issues/12","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12/packages"}},{"old_version":"\u003e=1.24.0","new_version":"\u003e=1.27.2.3","update_type":"minor","path":"/api","pr_created_at":"2026-04-30T00:56:25.000Z","version_change":"\u003e=1.24.0 → \u003e=1.27.2.3","issue":{"uuid":"4354614005","node_id":"PR_kwDOR_KFoM7W7Ddm","number":207,"state":"open","title":"deps(api): update pymupdf requirement from \u003e=1.24.0 to \u003e=1.27.2.3 in /api","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-30T00:56:25.000Z","updated_at":"2026-04-30T01:00:11.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(api): update","packages":[{"name":"pymupdf","old_version":"\u003e=1.24.0","new_version":"\u003e=1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":"/api","ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.0...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/yilinzhang130/BDGO/pull/207","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/yilinzhang130%2FBDGO/issues/207","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/207/packages"}},{"old_version":"\u003e=1.24.0","new_version":"\u003e=1.27.2.3","update_type":"minor","path":null,"pr_created_at":"2026-04-27T03:36:21.000Z","version_change":"\u003e=1.24.0 → \u003e=1.27.2.3","issue":{"uuid":"4332915414","node_id":"PR_kwDOQ5dxIc7V0IyR","number":19,"state":"open","title":"build(deps): update pymupdf requirement from \u003e=1.24.0 to \u003e=1.27.2.3","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-27T03:36:21.000Z","updated_at":"2026-04-27T03:36:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): update","packages":[{"name":"pymupdf","old_version":"\u003e=1.24.0","new_version":"\u003e=1.27.2.3","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eProvide a Linux wheel for free-threading python,\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/bf51516c1b1146d357e3705473f7dea6a405a589\"\u003e\u003ccode\u003ebf51516\u003c/code\u003e\u003c/a\u003e Update version to 1.27.2.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e5bddbbf4f4633ce2b6261f18ab6c9fb8a8bb857\"\u003e\u003ccode\u003ee5bddbb\u003c/code\u003e\u003c/a\u003e scripts/ tests/: updated to match new location of pipcl.py in src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/eda615d19e56ca9b7123b0030773fea3a3cf8dc6\"\u003e\u003ccode\u003eeda615d\u003c/code\u003e\u003c/a\u003e Move pipcl.py and wdev.py into src/.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7fe8b3683cda27684a5863a2de38e2b80165feb\"\u003e\u003ccode\u003ea7fe8b3\u003c/code\u003e\u003c/a\u003e changes.txt: updates for next release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/61da30ac418846be0b0a559ca407a3ad786f5d5f\"\u003e\u003ccode\u003e61da30a\u003c/code\u003e\u003c/a\u003e tests/test_drawings.py: New tests for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e: test_4954_1() test_4954_2().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5445fc01c6edb3397df2768febddf4da9802d9ae\"\u003e\u003ccode\u003e5445fc0\u003c/code\u003e\u003c/a\u003e docs/conf.py: change how we look for version numbers in setup.py and scripts/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1792ef0da7f801865e79278d1644b31de96c50f5\"\u003e\u003ccode\u003e1792ef0\u003c/code\u003e\u003c/a\u003e pyproject.toml: require package pipcl for building.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/237f0976fa75fd010ab5d838dc1ce714d7cd87ce\"\u003e\u003ccode\u003e237f097\u003c/code\u003e\u003c/a\u003e tests/: fix tests if we are incorrectly claiming to be thread safe.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd89bb04ee92c6e1f831bb5ae6d84ddd296987e4\"\u003e\u003ccode\u003ecd89bb0\u003c/code\u003e\u003c/a\u003e tests/conftest.py: also install pipcl, as we move to using pipcl package.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/341eab2d3b10a03cdd34b64a6acaeb38f43e8d9b\"\u003e\u003ccode\u003e341eab2\u003c/code\u003e\u003c/a\u003e setup.py: added support for incorrectly claiming to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.0...1.27.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/FunnyValentine69/epiassist/pull/19","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/FunnyValentine69%2Fepiassist/issues/19","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/19/packages"}},{"old_version":"\u003e=1.24.0","new_version":"\u003e=1.27.2.2","update_type":"minor","path":null,"pr_created_at":"2026-04-15T01:07:36.000Z","version_change":"\u003e=1.24.0 → \u003e=1.27.2.2","issue":{"uuid":"4265625275","node_id":"PR_kwDOQ1BAOM7Se-3S","number":5,"state":"open","title":"chore(deps): update pymupdf requirement from \u003e=1.24.0 to \u003e=1.27.2.2","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-15T01:07:36.000Z","updated_at":"2026-04-15T01:07:37.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"pymupdf","old_version":"\u003e=1.24.0","new_version":"\u003e=1.27.2.2","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e**Changes in version **\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/75c04018d2a16d39d51876253dca79e94582ce3b\"\u003e\u003ccode\u003e75c0401\u003c/code\u003e\u003c/a\u003e .github/ISSUE_TEMPLATE/bug_report.yml: add next version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/b256056c149bcc98b17baa389d24bd25a70c8967\"\u003e\u003ccode\u003eb256056\u003c/code\u003e\u003c/a\u003e changes.txt: updated for release of version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/f8adc34658e0736d1d71712048e2868eae704de5\"\u003e\u003ccode\u003ef8adc34\u003c/code\u003e\u003c/a\u003e setup.py: incremented version to 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c3d4e89d08d7ef3e034c3fd4dae3d7f421cb1cd1\"\u003e\u003ccode\u003ec3d4e89\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): update to match fixed behaviour in pymupd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e21f733988dacffb7664e61450a4ae3bcb3c41ba\"\u003e\u003ccode\u003ee21f733\u003c/code\u003e\u003c/a\u003e docs/ src/\u003cstrong\u003einit\u003c/strong\u003e.py: improve docs for insert_textbox() methods.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/2f362bd04158e51b681761051f5bbe1163fce042\"\u003e\u003ccode\u003e2f362bd\u003c/code\u003e\u003c/a\u003e Issue 4902: Fix linewidth of stroked text.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/409eede36626461894099a6c0686b28680baf747\"\u003e\u003ccode\u003e409eede\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): new, reproducer for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/ca1a0ac076805c6d033973127ea8dfe2f99c8eed\"\u003e\u003ccode\u003eca1a0ac\u003c/code\u003e\u003c/a\u003e Fix reference to Embedding Appendix in tutorial documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/77e4f3590e3b9e9d0725b5639f99aa11d7596723\"\u003e\u003ccode\u003e77e4f35\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py tests/: Partial fix for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e - exception in Document.scrub().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cb4ce4ceff2c22779c6ced48d5071cd208d8124e\"\u003e\u003ccode\u003ecb4ce4c\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py: add Annot.\u003cstrong\u003ebool\u003c/strong\u003e().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.0...1.27.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/kjayashr/reinforcement-learning/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/kjayashr%2Freinforcement-learning/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"}},{"old_version":"1.26.3","new_version":"1.26.5","update_type":"patch","path":null,"pr_created_at":"2026-04-13T18:02:26.000Z","version_change":"1.26.3 → 1.26.5","issue":{"uuid":"4256887333","node_id":"PR_kwDOPTHPGM7SEfFv","number":6,"state":"closed","title":"Bump the python-packages group across 1 directory with 7 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-12T00:13:50.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-13T18:02:26.000Z","updated_at":"2026-05-12T00:13:51.000Z","time_to_close":2441484,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python-packages","update_count":7,"packages":[{"name":"beautifulsoup4","old_version":"4.7.1","new_version":"4.14.3"},{"name":"lxml","old_version":"6.0.0","new_version":"6.0.4","repository_url":"https://github.com/lxml/lxml"},{"name":"xmltodict","old_version":"0.11.0","new_version":"1.0.4","repository_url":"https://github.com/martinblech/xmltodict"},{"name":"pyinstaller","old_version":"6.14.2","new_version":"6.19.0","repository_url":"https://github.com/pyinstaller/pyinstaller"},{"name":"pymupdf","old_version":"1.26.3","new_version":"1.26.5","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"markdown","old_version":"3.8.2","new_version":"3.9","repository_url":"https://github.com/Python-Markdown/markdown"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/), [lxml](https://github.com/lxml/lxml), [xmltodict](https://github.com/martinblech/xmltodict), [pyinstaller](https://github.com/pyinstaller/pyinstaller), [pymupdf](https://github.com/pymupdf/pymupdf), [markdown](https://github.com/Python-Markdown/markdown) and [setuptools](https://github.com/pypa/setuptools) to permit the latest version.\nUpdates `beautifulsoup4` from 4.7.1 to 4.14.3\n\nUpdates `lxml` from 6.0.0 to 6.0.4\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/lxml/lxml/blob/master/CHANGES.txt\"\u003elxml's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e6.0.4 (2026-04-12)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eLP#2148019: Spurious MemoryError during namespace cleanup.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e6.0.3 (2026-04-09)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSeveral out of memory error cases now raise \u003ccode\u003eMemoryError\u003c/code\u003e that were not handled before.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSlicing with large step values (outside of \u003ccode\u003e+/- sys.maxsize\u003c/code\u003e) could trigger undefined C behaviour.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eLP#2125399: Some failing tests were fixed or disabled in PyPy.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eLP#2138421: Memory leak in error cases when setting the \u003ccode\u003epublic_id\u003c/code\u003e or \u003ccode\u003esystem_url\u003c/code\u003e of a document.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMemory leak in case of a memory allocation failure when copying document subtrees.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWhen mapping an XPath result to Python failed, the result memory could leak.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWhen preparing an XSLT transform failed, the XSLT parameter memory could leak.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eOther changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eBuilt using Cython 3.2.4.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBinary wheels use zlib 1.3.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e6.0.2 (2025-09-21)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eLP#2125278: Compilation with libxml2 2.15.0 failed.\nOriginal patch by Xi Ruoyao.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSetting \u003ccode\u003edecompress=True\u003c/code\u003e in the parser had no effect in libxml2 2.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBinary wheels on Linux and macOS use the library version libxml2 2.14.6.\nSee \u003ca href=\"https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.14.6\"\u003ehttps://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.14.6\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/1fd1d6bc300bcd9a41def810c5fc3223811b579e\"\u003e\u003ccode\u003e1fd1d6b\u003c/code\u003e\u003c/a\u003e Fix release date.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/515485906ccdd89b61088e390f65f39e4c205158\"\u003e\u003ccode\u003e5154859\u003c/code\u003e\u003c/a\u003e CI: Include all library versions in libs cache key to asssure updated on vers...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/6a606f32724060fe0465cd38d6fb7e6e22e7ef81\"\u003e\u003ccode\u003e6a606f3\u003c/code\u003e\u003c/a\u003e Add \u0026quot;doesn't crash\u0026quot; tests for LP#2148019.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/f488f16d20014c0dfde59cd2930b41604bcc3c8d\"\u003e\u003ccode\u003ef488f16\u003c/code\u003e\u003c/a\u003e Prepare release of 6.0.4.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/1255d98f168672639c46cb6419a97e31026e8086\"\u003e\u003ccode\u003e1255d98\u003c/code\u003e\u003c/a\u003e LP#2148019: Prevent spurious MemoryError during namespace cleanup.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/03b0c4aa1aded486f2e4a04cf5c329524df73c57\"\u003e\u003ccode\u003e03b0c4a\u003c/code\u003e\u003c/a\u003e Remove dead type check.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/a6f833c7e187c17d5087d29227e066d94490280f\"\u003e\u003ccode\u003ea6f833c\u003c/code\u003e\u003c/a\u003e Fix release date.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/973d059449a66799f468b46f4b12c95e32cff5e9\"\u003e\u003ccode\u003e973d059\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/9044a52ce26a3ccf48b6cad8031234a0ddf7612b\"\u003e\u003ccode\u003e9044a52\u003c/code\u003e\u003c/a\u003e Build: Downgrade libiconv to 1.18 since 1.19 does not build reliably.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/a34dfdd593368fc444f6b66d03fd60d76966c9d2\"\u003e\u003ccode\u003ea34dfdd\u003c/code\u003e\u003c/a\u003e Build: Upgrade libiconv to 1.19.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/lxml/lxml/compare/lxml-6.0.0...lxml-6.0.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `xmltodict` from 0.11.0 to 1.0.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/martinblech/xmltodict/releases\"\u003exmltodict's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.0.4\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.3...v1.0.4\"\u003e1.0.4\u003c/a\u003e (2026-02-22)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eunparse:\u003c/strong\u003e add bytes_errors policy and handle bytes scalars consistently (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/ed704344226ed6451f6735811c695fb5004df44d\"\u003eed70434\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.0.3\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.2...v1.0.3\"\u003e1.0.3\u003c/a\u003e (2026-02-15)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eunparse:\u003c/strong\u003e serialize None text/attrs as empty values (fixes \u003ca href=\"https://redirect.github.com/martinblech/xmltodict/issues/401\"\u003e#401\u003c/a\u003e) (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/aa165113bef2b3a1a822209863343b9dc9ffe43a\"\u003eaa16511\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ereadme:\u003c/strong\u003e fix Fedora and Arch package links (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/fd6a73bf606c3932bcc82bf559a70867a1dd75cd\"\u003efd6a73b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.0.2\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.1...v1.0.2\"\u003e1.0.2\u003c/a\u003e (2025-09-17)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eallow DOCTYPE with disable_entities=True (default) (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/25b61a41f580cfc211df07c5fbbf603bd8eb5a5f\"\u003e25b61a4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.0.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.0...v1.0.1\"\u003e1.0.1\u003c/a\u003e (2025-09-17)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efail closed when entities disabled (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/c986d2d37a93d45fcc059b09063d9d9c45a655ec\"\u003ec986d2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003evalidate XML comments (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/3d4d2d3a4cd0f68d1211dba549010261fa87b969\"\u003e3d4d2d3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd SECURITY.md (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/64130233c8fea272a5f82f2f585e1593523ec1b1\"\u003e6413023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify behavior for empty lists (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/2025b5cb5e64fc9c4d54b8644187a0a193bdd0ed\"\u003e2025b5c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify process_comments docs (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/6b464fce284a93dbb292f3d063c9f310a478a014\"\u003e6b464fc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify strip whitespace comment behavior (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/b3e22032d21cc387d6cecf3930116e8fdc3151cf\"\u003eb3e2203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ecreate AGENTS.md for coding agents (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/0da66ee797ced7479312aecef92c6a25e235007c\"\u003e0da66ee\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace travis with actions badge (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/2576b94c918fbd154489a95dbbb3feda8bd3cbd8\"\u003e2576b94\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate CONTRIBUTING.md (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/db3918057cf125af989a1263d52df8df5ef8c642\"\u003edb39180\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.0.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/martinblech/xmltodict/blob/master/CHANGELOG.md\"\u003exmltodict's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.3...v1.0.4\"\u003e1.0.4\u003c/a\u003e (2026-02-22)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eunparse:\u003c/strong\u003e add bytes_errors policy and handle bytes scalars consistently (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/ed704344226ed6451f6735811c695fb5004df44d\"\u003eed70434\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.2...v1.0.3\"\u003e1.0.3\u003c/a\u003e (2026-02-15)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eunparse:\u003c/strong\u003e serialize None text/attrs as empty values (fixes \u003ca href=\"https://redirect.github.com/martinblech/xmltodict/issues/401\"\u003e#401\u003c/a\u003e) (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/aa165113bef2b3a1a822209863343b9dc9ffe43a\"\u003eaa16511\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ereadme:\u003c/strong\u003e fix Fedora and Arch package links (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/fd6a73bf606c3932bcc82bf559a70867a1dd75cd\"\u003efd6a73b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.1...v1.0.2\"\u003e1.0.2\u003c/a\u003e (2025-09-17)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eallow DOCTYPE with disable_entities=True (default) (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/25b61a41f580cfc211df07c5fbbf603bd8eb5a5f\"\u003e25b61a4\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v1.0.0...v1.0.1\"\u003e1.0.1\u003c/a\u003e (2025-09-17)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efail closed when entities disabled (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/c986d2d37a93d45fcc059b09063d9d9c45a655ec\"\u003ec986d2d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003evalidate XML comments (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/3d4d2d3a4cd0f68d1211dba549010261fa87b969\"\u003e3d4d2d3\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd SECURITY.md (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/64130233c8fea272a5f82f2f585e1593523ec1b1\"\u003e6413023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify behavior for empty lists (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/2025b5cb5e64fc9c4d54b8644187a0a193bdd0ed\"\u003e2025b5c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify process_comments docs (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/6b464fce284a93dbb292f3d063c9f310a478a014\"\u003e6b464fc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eclarify strip whitespace comment behavior (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/b3e22032d21cc387d6cecf3930116e8fdc3151cf\"\u003eb3e2203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ecreate AGENTS.md for coding agents (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/0da66ee797ced7479312aecef92c6a25e235007c\"\u003e0da66ee\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace travis with actions badge (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/2576b94c918fbd154489a95dbbb3feda8bd3cbd8\"\u003e2576b94\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eupdate CONTRIBUTING.md (\u003ca href=\"https://github.com/martinblech/xmltodict/commit/db3918057cf125af989a1263d52df8df5ef8c642\"\u003edb39180\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/compare/v0.15.1...v1.0.0\"\u003e1.0.0\u003c/a\u003e (2025-09-12)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING 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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/8d7f1fdb2251b5dc3b98df447850cb8229defc32\"\u003e\u003ccode\u003e8d7f1fd\u003c/code\u003e\u003c/a\u003e chore(master): release 1.0.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/ed704344226ed6451f6735811c695fb5004df44d\"\u003e\u003ccode\u003eed70434\u003c/code\u003e\u003c/a\u003e fix(unparse): add bytes_errors policy and handle bytes scalars consistently\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/89c4bf77b856da1e446fb6f017bf87c7c7f298bf\"\u003e\u003ccode\u003e89c4bf7\u003c/code\u003e\u003c/a\u003e chore(master): release 1.0.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/fd6a73bf606c3932bcc82bf559a70867a1dd75cd\"\u003e\u003ccode\u003efd6a73b\u003c/code\u003e\u003c/a\u003e docs(readme): fix Fedora and Arch package links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/aa165113bef2b3a1a822209863343b9dc9ffe43a\"\u003e\u003ccode\u003eaa16511\u003c/code\u003e\u003c/a\u003e fix(unparse): serialize None text/attrs as empty values (fixes \u003ca href=\"https://redirect.github.com/martinblech/xmltodict/issues/401\"\u003e#401\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/f7d76c96fc0141238947abcc5fa925d3ffd9eb78\"\u003e\u003ccode\u003ef7d76c9\u003c/code\u003e\u003c/a\u003e style: lines required between function definitions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/1bfb267cd00ba699539d3653b8e0cd3707b2a164\"\u003e\u003ccode\u003e1bfb267\u003c/code\u003e\u003c/a\u003e build: remove unnecessary \u003ccode\u003ewheel\u003c/code\u003e from dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/d9f6d409008ad1115de73a9d5221bf16a2d647db\"\u003e\u003ccode\u003ed9f6d40\u003c/code\u003e\u003c/a\u003e build: no need for README.md in MANIFEST.in\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/34378ef595b1dd553918a19e0f1540dcc5f94b22\"\u003e\u003ccode\u003e34378ef\u003c/code\u003e\u003c/a\u003e build: pep 639 compliance\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/martinblech/xmltodict/commit/d079849136b031c471ec96a168ad7859ed5994ff\"\u003e\u003ccode\u003ed079849\u003c/code\u003e\u003c/a\u003e chore(master): release 1.0.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/martinblech/xmltodict/compare/v0.11.0...v1.0.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyinstaller` from 6.14.2 to 6.19.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyinstaller/pyinstaller/releases\"\u003epyinstaller's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.19.0\u003c/h2\u003e\n\u003cp\u003ePlease see the \u003ca href=\"https://pyinstaller.org/en/v6.19.0/CHANGES.html#id1\"\u003ev6.19.0 section of the changelog\u003c/a\u003e for a list of the changes since v6.18.0.\u003c/p\u003e\n\u003ch2\u003ev6.18.0\u003c/h2\u003e\n\u003cp\u003ePlease see the \u003ca href=\"https://pyinstaller.org/en/v6.18.0/CHANGES.html#id1\"\u003ev6.18.0 section of the changelog\u003c/a\u003e for a list of the changes since v6.17.0.\u003c/p\u003e\n\u003ch2\u003ev6.17.0\u003c/h2\u003e\n\u003cp\u003ePlease see the \u003ca href=\"https://pyinstaller.org/en/v6.17.0/CHANGES.html#id1\"\u003ev6.17.0 section of the changelog\u003c/a\u003e for a list of the changes since v6.16.0.\u003c/p\u003e\n\u003ch2\u003ev6.16.0\u003c/h2\u003e\n\u003cp\u003ePlease see the \u003ca href=\"https://pyinstaller.org/en/v6.16.0/CHANGES.html#id1\"\u003ev6.16.0 section of the changelog\u003c/a\u003e for a list of the changes since v6.15.0.\u003c/p\u003e\n\u003ch2\u003ev6.15.0\u003c/h2\u003e\n\u003cp\u003ePlease see the \u003ca href=\"https://pyinstaller.org/en/v6.15.0/CHANGES.html#id1\"\u003ev6.15.0 section of the changelog\u003c/a\u003e for a list of the changes since v6.14.2.\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/pyinstaller/pyinstaller/blob/develop/doc/CHANGES.rst\"\u003epyinstaller's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.19.0 (2026-02-14)\u003c/h2\u003e\n\u003cp\u003eBugfix\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* (Windows) Fix collection of ``numpy`` DLLs when ``numpy`` PyPI wheel is\n  installed using ``uv`` instead of ``pip``. (:issue:`9360`)\n* Extend suppression of missing ``api-ms-win-*.dll`` warnings to Windows Server\n  (formerly Windows 10 and 11). (:issue:`9355`)\n* (Conda) Fix error during initialization of the `conda` hook utility module in\n  Anaconda environments where the metadata for packages with no dependencies\n  omit their *dependencies* key. (:issue:`9345`)\n\u003cp\u003eHooks\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* (Windows) Fix installer check in ``numpy`` hook to enable explicit collection\n  of DLLs from ``numpy.libs`` directory when ``numpy`` PyPI wheels are installed\n  through an installer other than ``pip`` - for example, ``uv``. (:issue:`9365`)\n* (Windows) Update the ``pandas`` hook to explicitly collect the DLLs\n  from ``pandas.libs`` directory that has been used in Windows PyPI wheels\n  since ``pandas`` 2.1.0. (:issue:`9365`)\n\n\n6.18.0 (2026-01-13)\n-------------------\n\nFeatures\n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;Implement support for Tcl/Tk 9 in splash screen. (:issue:\u0026lt;code\u0026gt;9313\u0026lt;/code\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;p\u0026gt;Bugfix\u0026lt;/p\u0026gt;\n\u0026lt;pre\u0026gt;\u0026lt;code\u0026gt;\n* (macOS) Improve the .framework bundle fix-up code to remove file entries\n  that would be placed under restored symlinked directories. This fixes\n  file-already-exists errors at build time (onedir) or run-time (onefile)\n  when user or a hook tries to collect (all) files from a package that\n  ships a .framework bundle with symlinks mangled into hard-copies\n  (for example, due to lack of symlink support in PyPI wheels). (:issue:`9335`)\n* Have hook for stdlib ``platform`` module exclude the ``_ios_support``\n  module when ``sys.platform != 'ios'``. This prevents unnecessary\n  collection of ``ctypes``-imported ``libobjc`` shared library if the\n  latter happens to be available on the build system. (:issue:`9333`)\n\n\n\u0026amp;lt;/tr\u0026amp;gt;\u0026amp;lt;/table\u0026amp;gt; \n\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\n\u0026lt;/blockquote\u0026gt;\n\u0026lt;p\u0026gt;... (truncated)\u0026lt;/p\u0026gt;\n\u0026lt;/details\u0026gt;\n\u0026lt;details\u0026gt;\n\u0026lt;summary\u0026gt;Commits\u0026lt;/summary\u0026gt;\n\n\u0026lt;ul\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/9ae6e2afa4e55c3a784ec88ac74a71688a2a37c8\u0026quot;\u0026gt;\u0026lt;code\u0026gt;9ae6e2a\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Release v6.19.0. [skip ci]\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/50eebf41d1b9309000b4ca6a74c0cc3c3f9b6a73\u0026quot;\u0026gt;\u0026lt;code\u0026gt;50eebf4\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; ci: cygwin: add the work-around for broken setuptools upgrade\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/a09778bb289fc24fb34dc675a9e71d3f09794a0a\u0026quot;\u0026gt;\u0026lt;code\u0026gt;a09778b\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; ci: extend the work-around for broken setuptools upgrade\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/a7f87e58c2023ff699610b6af47f4fe4b3a12313\u0026quot;\u0026gt;\u0026lt;code\u0026gt;a7f87e5\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; tests: port remaining metadata tests to importlib.metadata\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/2e751ba399ccf10f0aeb843cbb2f183c22509a6b\u0026quot;\u0026gt;\u0026lt;code\u0026gt;2e751ba\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; tests: add missing importorskip('pkg_resources') decorators\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/611f658dae8881eab3f2264bb90aac136a2152aa\u0026quot;\u0026gt;\u0026lt;code\u0026gt;611f658\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; tests: update setuptools to 82.0.0\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/38ae78854b07bd33359929c6d1a9df52c4544085\u0026quot;\u0026gt;\u0026lt;code\u0026gt;38ae788\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Tests: Requirements: Scheduled weekly dependency update for week 06 (\u0026lt;a href=\u0026quot;https://redirect.github.com/pyinstaller/pyinstaller/issues/9369\u0026quot;\u0026gt;#9369\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/e937d76ea5e2177f295488bcaaa6d641adc328cf\u0026quot;\u0026gt;\u0026lt;code\u0026gt;e937d76\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; Tests: Requirements: Scheduled weekly dependency update for week 05 (\u0026lt;a href=\u0026quot;https://redirect.github.com/pyinstaller/pyinstaller/issues/9366\u0026quot;\u0026gt;#9366\u0026lt;/a\u0026gt;)\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/ce6d02ce7ac3d19a6b5a4ef57775d589bc125b4d\u0026quot;\u0026gt;\u0026lt;code\u0026gt;ce6d02c\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; hooks: pandas: use delvewheel hook utility function to collect DLLs\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;\u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/commit/f0ee7305a607969fee6c02b76e387669df0e0ad7\u0026quot;\u0026gt;\u0026lt;code\u0026gt;f0ee730\u0026lt;/code\u0026gt;\u0026lt;/a\u0026gt; hooks: numpy: relax installer-type check for delvewheel codepath\u0026lt;/li\u0026gt;\n\u0026lt;li\u0026gt;Additional commits viewable in \u0026lt;a href=\u0026quot;https://github.com/pyinstaller/pyinstaller/compare/v6.14.2...v6.19.0\u0026quot;\u0026gt;compare view\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt;\n\u0026lt;/ul\u0026gt;\n\u0026lt;/details\u0026gt;\n\n\u0026lt;br /\u0026gt;\u003c/code\u003e\u003c/pre\u003e\n\nUpdates `pymupdf` from 1.26.3 to 1.26.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.26.5 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on pypi.org and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e[Linux-aarch64 wheels will be built and uploaded later.]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.26.5\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.26.10.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/2883\"\u003e#2883\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4507\"\u003e#4507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4613\"\u003e#4613\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4700\"\u003e#4700\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4716\"\u003e#4716\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupported Python versions are now 3.9-3.14.\u003c/li\u003e\n\u003cli\u003eWe now define all class methods explicitly instead of with dynamic assignment; this improves type hints.\u003c/li\u003e\n\u003cli\u003eRemoved \u003ccode\u003epymupdf.utils.Shape\u003c/code\u003e class, was duplicate of \u003ccode\u003epymupdf.Shape\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAllow use of cibuildwheel to build and test on Pyodide.\u003c/li\u003e\n\u003cli\u003eFixed various Pyodide bugs.\u003c/li\u003e\n\u003cli\u003eIn documentation, added section about Linux wheels and glibc compatibility.\u003c/li\u003e\n\u003cli\u003eImproved documentation of pymupdf.open()'s \u003c!-- raw HTML omitted --\u003e arg.\u003c/li\u003e\n\u003cli\u003eRetrospectively mark \u003ccode\u003e4544 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4544\u0026gt;\u003c/code\u003e_ as fixed in 1.26.4.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.26.4 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on pypi.org and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e[Linux-aarch64 wheels will be built and uploaded later.]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.26.4\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.26.7.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/3806\"\u003e#3806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4388\"\u003e#4388\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4457\"\u003e#4457\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e**Changes in version **\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cc13f8081799c42674a15ef7af6ed90d43b95e89\"\u003e\u003ccode\u003ecc13f80\u003c/code\u003e\u003c/a\u003e pipcl.py: Added asserts to avoid obscure build/runtime errors.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cd79b59f0308aa4ff857f39a030fa1dc1e78f5ce\"\u003e\u003ccode\u003ecd79b59\u003c/code\u003e\u003c/a\u003e scripts/test.py: improved cibw command.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/97ed979b651205852dd6d417860851070eeabbd3\"\u003e\u003ccode\u003e97ed979\u003c/code\u003e\u003c/a\u003e scripts/test.py: avoid test failures from cibw's recent default to include fr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/a7075241b1b6170a7a67aaa4660070889796ae85\"\u003e\u003ccode\u003ea707524\u003c/code\u003e\u003c/a\u003e tests/test_release.py: avoid error from os.path.relpath() on windows.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/aef5d64601af2d79776a29f6b136467e969399ea\"\u003e\u003ccode\u003eaef5d64\u003c/code\u003e\u003c/a\u003e scripts/test.py: fixed bug in manylinux cibuildwheel builds.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c4a83eaf0bcde1fc3ff1310271868d1a1da75918\"\u003e\u003ccode\u003ec4a83ea\u003c/code\u003e\u003c/a\u003e tests/: added test_4699() for upstream bug fixed with mupdf master.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/090e23e315a03b32fd719faff629eea41d373f94\"\u003e\u003ccode\u003e090e23e\u003c/code\u003e\u003c/a\u003e changes.txt: add date of most recent release 1.26.4.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/90e86e7285239360b017ff45e264724da19ca803\"\u003e\u003ccode\u003e90e86e7\u003c/code\u003e\u003c/a\u003e Add 3.14 to list of supported Python versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/13d89c094ebf01a044f9734313128ad060b1a13b\"\u003e\u003ccode\u003e13d89c0\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py: fix call of pdf_is_ocg_hidden() with mupdf master.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d9d4ab8998dbf692f1de27beec6d10598b9f9eb4\"\u003e\u003ccode\u003ed9d4ab8\u003c/code\u003e\u003c/a\u003e changes.txt: updated to match all changes since 1.26.4 release.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.3...1.26.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown` from 3.8.2 to 3.9\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.9.0\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFootnotes are now ordered by the occurrence of their references in the\ndocument. A new configuration option for the footnotes extension,\n\u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e, has been added to support restoring the previous\nbehavior of ordering footnotes by the occurrence of definitions (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1367\"\u003e#1367\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure inline processing iterates through elements in document order (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1546\"\u003e#1546\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix handling of incomplete HTML tags in code spans in Python 3.14 (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1547\"\u003e#1547\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\u003cp\u003etitle: Changelog\ntoc_depth: 2\u003c/p\u003e\n\u003ch1\u003ePython-Markdown Changelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this file.\u003c/p\u003e\n\u003cp\u003eThe format is based on \u003ca href=\"https://keepachangelog.com/en/1.1.0/\"\u003eKeep a Changelog\u003c/a\u003e,\nand this project adheres to the\n\u003ca href=\"https://packaging.python.org/en/latest/specifications/version-specifiers/\"\u003ePython Version Specification\u003c/a\u003e.\nSee the \u003ca href=\"https://github.com/Python-Markdown/markdown/blob/master/docs/contributing.md\"\u003eContributing Guide\u003c/a\u003e for details.\u003c/p\u003e\n\u003ch2\u003e[3.10.2] - 2026-02-09\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix a regression related to comment handling (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1590\"\u003e#1590\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMore reliable fix for \u003ccode\u003e\u0026lt;/\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1593\"\u003e#1593\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[3.10.1] - 2026-01-21\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure nested elements inside inline comments are properly unescaped (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1571\"\u003e#1571\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMake the docs build successfully with mkdocstrings-python 2.0 (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1575\"\u003e#1575\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix infinite loop when multiple bogus or unclosed HTML comments appear in input (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1578\"\u003e#1578\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix another infinite loop when handling bad comments (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1586\"\u003e#1586\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[3.10.0] - 2025-11-03\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOfficially support Python 3.14 and PyPy 3.11 and drop support for Python 3.9\nand PyPy 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix an HTML comment parsing case in some Python versions that can cause an\ninfinite loop (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1554\"\u003e#1554\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRevert the default behavior of \u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e (to \u003ccode\u003eTrue\u003c/code\u003e). The new\nbehavior introduced in 3.9.0 is experimental and results are inconsistent.\nIt should not have been made the default behavior (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1561\"\u003e#1561\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[3.9.0] - 2025-09-04\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFootnotes are now ordered by the occurrence of their references in the\ndocument. A new configuration option for the footnotes extension,\n\u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e, has been added to support restoring the previous\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/f39cf84a24124526c1a0efbe52219fa9950774f6\"\u003e\u003ccode\u003ef39cf84\u003c/code\u003e\u003c/a\u003e Bump version to 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/07bf2076623be5de9952e1f35bfb8c218b699300\"\u003e\u003ccode\u003e07bf207\u003c/code\u003e\u003c/a\u003e Order footnotes by reference\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/23c301de28e12426408656efdfa153b11d4ff558\"\u003e\u003ccode\u003e23c301d\u003c/code\u003e\u003c/a\u003e Fix failing cases for Python 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/4669a09894d4a35cd5f5d2106b0da95e48d1a3f9\"\u003e\u003ccode\u003e4669a09\u003c/code\u003e\u003c/a\u003e fix typo\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Python-Markdown/markdown/compare/3.8.2...3.9.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `setuptools` to 82.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/setuptools/blob/main/NEWS.rst\"\u003esetuptools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev82.0.1\u003c/h1\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the loading of \u003ccode\u003elauncher manifest.xml\u003c/code\u003e file. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5047\"\u003e#5047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplaced deprecated \u003ccode\u003ejson.__version__\u003c/code\u003e with fixture in tests. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5186\"\u003e#5186\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved Documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd advice about how to improve predictability when installing sdists. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5168\"\u003e#5168\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMisc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/4941\"\u003e#4941\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5157\"\u003e#5157\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5169\"\u003e#5169\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5175\"\u003e#5175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev82.0.0\u003c/h1\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epkg_resources\u003c/code\u003e has been removed from Setuptools. Most common uses of \u003ccode\u003epkg_resources\u003c/code\u003e have been superseded by the \u003ccode\u003eimportlib.resources \u0026lt;https://docs.python.org/3/library/importlib.resources.html\u0026gt;\u003c/code\u003e_ and \u003ccode\u003eimportlib.metadata \u0026lt;https://docs.python.org/3/library/importlib.metadata.html\u0026gt;\u003c/code\u003e_ projects. Projects and environments relying on \u003ccode\u003epkg_resources\u003c/code\u003e for namespace packages or other behavior should depend on older versions of \u003ccode\u003esetuptools\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/3085\"\u003e#3085\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev81.0.0\u003c/h1\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved support for the --dry-run parameter to setup.py. This one feature by its nature threads through lots of core and ancillary functionality, adding complexity and friction. Removal of this parameter will help decouple the compiler functionality from distutils and thus the eventual full integration of distutils. These changes do affect some class and function signatures, so any derivative functionality may require some compatibility shims to support their expected interface. Please report any issues to the Setuptools project for investigation. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/4872\"\u003e#4872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev80.10.2\u003c/h1\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate vendored dependencies. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5159\"\u003e#5159\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMisc\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/5a13876673a41e3cd21d4d6e587f53d0fb4fd8e5\"\u003e\u003ccode\u003e5a13876\u003c/code\u003e\u003c/a\u003e Bump version: 82.0.0 → 82.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/51ab8f183f1c4112675d8d6ec6b004406d518ee8\"\u003e\u003ccode\u003e51ab8f1\u003c/code\u003e\u003c/a\u003e Avoid using (deprecated) 'json.\u003cstrong\u003eversion\u003c/strong\u003e' in tests (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5194\"\u003e#5194\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/f9c37b20bb0ed11203f676f9683452a4c3ace6f6\"\u003e\u003ccode\u003ef9c37b2\u003c/code\u003e\u003c/a\u003e Docs/CI: Fix intersphinx references (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5195\"\u003e#5195\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/8173db2a4fc0f6cb28926b3dba59116b79f435c8\"\u003e\u003ccode\u003e8173db2\u003c/code\u003e\u003c/a\u003e Docs: Fix intersphinx references\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/09bafbc74923f2a3591b5b098be75d6af6ca5141\"\u003e\u003ccode\u003e09bafbc\u003c/code\u003e\u003c/a\u003e Fix past tense on newsfragment\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/461ea56c8e629819a23920f44d9298d4f041abde\"\u003e\u003ccode\u003e461ea56\u003c/code\u003e\u003c/a\u003e Add news fragment\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/c4ffe535b58235ff9f9ebe90d24a2cffb57e70ae\"\u003e\u003ccode\u003ec4ffe53\u003c/code\u003e\u003c/a\u003e Avoid using (deprecated) 'json.\u003cstrong\u003eversion\u003c/strong\u003e' in tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/749258b1a96c7accc05ea7d842fb19fc378866fe\"\u003e\u003ccode\u003e749258b\u003c/code\u003e\u003c/a\u003e Cleanup \u003ccode\u003epkg_resources\u003c/code\u003e dependencies and configuration (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5175\"\u003e#5175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/2019c16701667db1010c62ec11c6ef78c2e58206\"\u003e\u003ccode\u003e2019c16\u003c/code\u003e\u003c/a\u003e Parse \u003ccode\u003eext-module.define-macros\u003c/code\u003e from \u003ccode\u003epyproject.toml\u003c/code\u003e as list of tuples (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5169\"\u003e#5169\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/b809c86a37d97fcce290d5f51d4c293ab40bc685\"\u003e\u003ccode\u003eb809c86\u003c/code\u003e\u003c/a\u003e Sync setuptools schema with validate-pyproject (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5157\"\u003e#5157\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/setuptools/compare/v61.0.0...v82.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/codevenkat/Lector/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/codevenkat%2FLector/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}},{"old_version":"\u003e=1.26.7","new_version":"\u003e=1.27.2.2","update_type":"minor","path":null,"pr_created_at":"2026-04-13T00:16:47.000Z","version_change":"\u003e=1.26.7 → \u003e=1.27.2.2","issue":{"uuid":"4250425051","node_id":"PR_kwDOQ7pH287R1Xav","number":18,"state":"open","title":"deps: update pymupdf requirement from \u003e=1.26.7 to \u003e=1.27.2.2","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-04-13T00:16:47.000Z","updated_at":"2026-04-13T00:17:26.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps: update","packages":[{"name":"pymupdf","old_version":"\u003e=1.26.7","new_version":"\u003e=1.27.2.2","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [pymupdf](https://github.com/pymupdf/pymupdf) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e**Changes in version **\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/75c04018d2a16d39d51876253dca79e94582ce3b\"\u003e\u003ccode\u003e75c0401\u003c/code\u003e\u003c/a\u003e .github/ISSUE_TEMPLATE/bug_report.yml: add next version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/b256056c149bcc98b17baa389d24bd25a70c8967\"\u003e\u003ccode\u003eb256056\u003c/code\u003e\u003c/a\u003e changes.txt: updated for release of version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/f8adc34658e0736d1d71712048e2868eae704de5\"\u003e\u003ccode\u003ef8adc34\u003c/code\u003e\u003c/a\u003e setup.py: incremented version to 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c3d4e89d08d7ef3e034c3fd4dae3d7f421cb1cd1\"\u003e\u003ccode\u003ec3d4e89\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): update to match fixed behaviour in pymupd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e21f733988dacffb7664e61450a4ae3bcb3c41ba\"\u003e\u003ccode\u003ee21f733\u003c/code\u003e\u003c/a\u003e docs/ src/\u003cstrong\u003einit\u003c/strong\u003e.py: improve docs for insert_textbox() methods.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/2f362bd04158e51b681761051f5bbe1163fce042\"\u003e\u003ccode\u003e2f362bd\u003c/code\u003e\u003c/a\u003e Issue 4902: Fix linewidth of stroked text.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/409eede36626461894099a6c0686b28680baf747\"\u003e\u003ccode\u003e409eede\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): new, reproducer for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/ca1a0ac076805c6d033973127ea8dfe2f99c8eed\"\u003e\u003ccode\u003eca1a0ac\u003c/code\u003e\u003c/a\u003e Fix reference to Embedding Appendix in tutorial documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/77e4f3590e3b9e9d0725b5639f99aa11d7596723\"\u003e\u003ccode\u003e77e4f35\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py tests/: Partial fix for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e - exception in Document.scrub().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cb4ce4ceff2c22779c6ced48d5071cd208d8124e\"\u003e\u003ccode\u003ecb4ce4c\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py: add Annot.\u003cstrong\u003ebool\u003c/strong\u003e().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.7...1.27.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/WSzP/cv-warlock/pull/18","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/WSzP%2Fcv-warlock/issues/18","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/18/packages"}},{"old_version":"1.26.5","new_version":"1.27.2.2","update_type":"minor","path":null,"pr_created_at":"2026-04-12T09:10:43.000Z","version_change":"1.26.5 → 1.27.2.2","issue":{"uuid":"4247364375","node_id":"PR_kwDOSAccuM7RwH-V","number":6,"state":"closed","title":"build(deps-dev): bump pymupdf from 1.26.5 to 1.27.2.2","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-04-26T10:23:16.000Z","author_association":null,"state_reason":null,"created_at":"2026-04-12T09:10:43.000Z","updated_at":"2026-04-26T10:23:17.000Z","time_to_close":1213953,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps-dev)","packages":[{"name":"pymupdf","old_version":"1.26.5","new_version":"1.27.2.2","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.26.5 to 1.27.2.2.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4903\"\u003e#4903\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.1  released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- 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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e**Changes in version **\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of \u003ccode\u003e*_forward_decl\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eget_textpage_ocr()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/75c04018d2a16d39d51876253dca79e94582ce3b\"\u003e\u003ccode\u003e75c0401\u003c/code\u003e\u003c/a\u003e .github/ISSUE_TEMPLATE/bug_report.yml: add next version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/b256056c149bcc98b17baa389d24bd25a70c8967\"\u003e\u003ccode\u003eb256056\u003c/code\u003e\u003c/a\u003e changes.txt: updated for release of version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/f8adc34658e0736d1d71712048e2868eae704de5\"\u003e\u003ccode\u003ef8adc34\u003c/code\u003e\u003c/a\u003e setup.py: incremented version to 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c3d4e89d08d7ef3e034c3fd4dae3d7f421cb1cd1\"\u003e\u003ccode\u003ec3d4e89\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): update to match fixed behaviour in pymupd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e21f733988dacffb7664e61450a4ae3bcb3c41ba\"\u003e\u003ccode\u003ee21f733\u003c/code\u003e\u003c/a\u003e docs/ src/\u003cstrong\u003einit\u003c/strong\u003e.py: improve docs for insert_textbox() methods.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/2f362bd04158e51b681761051f5bbe1163fce042\"\u003e\u003ccode\u003e2f362bd\u003c/code\u003e\u003c/a\u003e Issue 4902: Fix linewidth of stroked text.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/409eede36626461894099a6c0686b28680baf747\"\u003e\u003ccode\u003e409eede\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): new, reproducer for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/ca1a0ac076805c6d033973127ea8dfe2f99c8eed\"\u003e\u003ccode\u003eca1a0ac\u003c/code\u003e\u003c/a\u003e Fix reference to Embedding Appendix in tutorial documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/77e4f3590e3b9e9d0725b5639f99aa11d7596723\"\u003e\u003ccode\u003e77e4f35\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py tests/: Partial fix for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e - exception in Document.scrub().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cb4ce4ceff2c22779c6ced48d5071cd208d8124e\"\u003e\u003ccode\u003ecb4ce4c\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py: add Annot.\u003cstrong\u003ebool\u003c/strong\u003e().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.5...1.27.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pymupdf\u0026package-manager=pip\u0026previous-version=1.26.5\u0026new-version=1.27.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/Dikshajaju/CV/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dikshajaju%2FCV/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}},{"old_version":"1.26.7","new_version":"1.27.2.2","update_type":"minor","path":null,"pr_created_at":"2026-03-23T01:52:04.000Z","version_change":"1.26.7 → 1.27.2.2","issue":{"uuid":"4117694089","node_id":"PR_kwDOPJuLvc7MjED5","number":100,"state":"open","title":"chore(deps): bump pymupdf from 1.26.7 to 1.27.2.2","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-03-23T01:52:04.000Z","updated_at":"2026-03-23T01:52:10.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"pymupdf","old_version":"1.26.7","new_version":"1.27.2.2","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.26.7 to 1.27.2.2.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4903\"\u003e#4903\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.1  released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- 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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: `\u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of *_forward_decl\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4751 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4751\u0026gt;\u003c/code\u003e_: Memory leaking in page.widgets()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4762 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4762\u0026gt;\u003c/code\u003e_: Importing pymupdf make pillow segmentation fault for converting jp2 file on ArchLinux\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4790 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4790\u0026gt;\u003c/code\u003e_: Problem to delete pages on PDF\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4857 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4857\u0026gt;\u003c/code\u003e_: Package is missing py.typed file required for type checking\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4886 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4886\u0026gt;\u003c/code\u003e_: \u003c!-- raw HTML omitted --\u003e width attribute behaviour seems wrong\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4907 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4907\u0026gt;\u003c/code\u003e_: signal 11:SIGSEGV while using display_list.get_textpage()\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\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/pymupdf/PyMuPDF/commit/75c04018d2a16d39d51876253dca79e94582ce3b\"\u003e\u003ccode\u003e75c0401\u003c/code\u003e\u003c/a\u003e .github/ISSUE_TEMPLATE/bug_report.yml: add next version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/b256056c149bcc98b17baa389d24bd25a70c8967\"\u003e\u003ccode\u003eb256056\u003c/code\u003e\u003c/a\u003e changes.txt: updated for release of version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/f8adc34658e0736d1d71712048e2868eae704de5\"\u003e\u003ccode\u003ef8adc34\u003c/code\u003e\u003c/a\u003e setup.py: incremented version to 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c3d4e89d08d7ef3e034c3fd4dae3d7f421cb1cd1\"\u003e\u003ccode\u003ec3d4e89\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): update to match fixed behaviour in pymupd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e21f733988dacffb7664e61450a4ae3bcb3c41ba\"\u003e\u003ccode\u003ee21f733\u003c/code\u003e\u003c/a\u003e docs/ src/\u003cstrong\u003einit\u003c/strong\u003e.py: improve docs for insert_textbox() methods.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/2f362bd04158e51b681761051f5bbe1163fce042\"\u003e\u003ccode\u003e2f362bd\u003c/code\u003e\u003c/a\u003e Issue 4902: Fix linewidth of stroked text.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/409eede36626461894099a6c0686b28680baf747\"\u003e\u003ccode\u003e409eede\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): new, reproducer for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/ca1a0ac076805c6d033973127ea8dfe2f99c8eed\"\u003e\u003ccode\u003eca1a0ac\u003c/code\u003e\u003c/a\u003e Fix reference to Embedding Appendix in tutorial documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/77e4f3590e3b9e9d0725b5639f99aa11d7596723\"\u003e\u003ccode\u003e77e4f35\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py tests/: Partial fix for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e - exception in Document.scrub().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cb4ce4ceff2c22779c6ced48d5071cd208d8124e\"\u003e\u003ccode\u003ecb4ce4c\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py: add Annot.\u003cstrong\u003ebool\u003c/strong\u003e().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.7...1.27.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pymupdf\u0026package-manager=pip\u0026previous-version=1.26.7\u0026new-version=1.27.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/nextybase/timmy-kb-acme/pull/100","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/nextybase%2Ftimmy-kb-acme/issues/100","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/100/packages"}},{"old_version":"1.26.5","new_version":"1.27.2.2","update_type":"minor","path":null,"pr_created_at":"2026-03-21T03:58:07.000Z","version_change":"1.26.5 → 1.27.2.2","issue":{"uuid":"4111295204","node_id":"PR_kwDOP62mM87MUD9a","number":36,"state":"open","title":"deps(python)(deps): bump pymupdf from 1.26.5 to 1.27.2.2","user":"dependabot[bot]","labels":["dependencies","python","agent:fix"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-03-21T03:58:07.000Z","updated_at":"2026-03-21T03:58:32.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(python)(deps)","packages":[{"name":"pymupdf","old_version":"1.26.5","new_version":"1.27.2.2","repository_url":"https://github.com/pymupdf/pymupdf"}],"path":null,"ecosystem":"pip"},"body":"Bumps [pymupdf](https://github.com/pymupdf/pymupdf) from 1.26.5 to 1.27.2.2.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4903\"\u003e#4903\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.1  released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- 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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: `\u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.\u003c/strong\u003e (2026-03-10)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of *_forward_decl\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4751 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4751\u0026gt;\u003c/code\u003e_: Memory leaking in page.widgets()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4762 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4762\u0026gt;\u003c/code\u003e_: Importing pymupdf make pillow segmentation fault for converting jp2 file on ArchLinux\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4790 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4790\u0026gt;\u003c/code\u003e_: Problem to delete pages on PDF\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4857 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4857\u0026gt;\u003c/code\u003e_: Package is missing py.typed file required for type checking\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4886 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4886\u0026gt;\u003c/code\u003e_: \u003c!-- raw HTML omitted --\u003e width attribute behaviour seems wrong\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4907 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4907\u0026gt;\u003c/code\u003e_: signal 11:SIGSEGV while using display_list.get_textpage()\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\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/pymupdf/PyMuPDF/commit/75c04018d2a16d39d51876253dca79e94582ce3b\"\u003e\u003ccode\u003e75c0401\u003c/code\u003e\u003c/a\u003e .github/ISSUE_TEMPLATE/bug_report.yml: add next version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/b256056c149bcc98b17baa389d24bd25a70c8967\"\u003e\u003ccode\u003eb256056\u003c/code\u003e\u003c/a\u003e changes.txt: updated for release of version 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/f8adc34658e0736d1d71712048e2868eae704de5\"\u003e\u003ccode\u003ef8adc34\u003c/code\u003e\u003c/a\u003e setup.py: incremented version to 1.27.2.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/c3d4e89d08d7ef3e034c3fd4dae3d7f421cb1cd1\"\u003e\u003ccode\u003ec3d4e89\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): update to match fixed behaviour in pymupd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e21f733988dacffb7664e61450a4ae3bcb3c41ba\"\u003e\u003ccode\u003ee21f733\u003c/code\u003e\u003c/a\u003e docs/ src/\u003cstrong\u003einit\u003c/strong\u003e.py: improve docs for insert_textbox() methods.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/2f362bd04158e51b681761051f5bbe1163fce042\"\u003e\u003ccode\u003e2f362bd\u003c/code\u003e\u003c/a\u003e Issue 4902: Fix linewidth of stroked text.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/409eede36626461894099a6c0686b28680baf747\"\u003e\u003ccode\u003e409eede\u003c/code\u003e\u003c/a\u003e tests/test_general.py: test_4902(): new, reproducer for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/ca1a0ac076805c6d033973127ea8dfe2f99c8eed\"\u003e\u003ccode\u003eca1a0ac\u003c/code\u003e\u003c/a\u003e Fix reference to Embedding Appendix in tutorial documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/77e4f3590e3b9e9d0725b5639f99aa11d7596723\"\u003e\u003ccode\u003e77e4f35\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py tests/: Partial fix for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e - exception in Document.scrub().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/cb4ce4ceff2c22779c6ced48d5071cd208d8124e\"\u003e\u003ccode\u003ecb4ce4c\u003c/code\u003e\u003c/a\u003e src/\u003cstrong\u003einit\u003c/strong\u003e.py: add Annot.\u003cstrong\u003ebool\u003c/strong\u003e().\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.26.5...1.27.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pymupdf\u0026package-manager=pip\u0026previous-version=1.26.5\u0026new-version=1.27.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/caraxesthebloodwyrm02/echoes/pull/36","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/caraxesthebloodwyrm02%2Fechoes/issues/36","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/36/packages"}},{"old_version":"1.27.1","new_version":"1.27.2","update_type":"patch","path":null,"pr_created_at":"2026-03-16T09:31:30.000Z","version_change":"1.27.1 → 1.27.2","issue":{"uuid":"4081297930","node_id":"PR_kwDOPvOdvs7K3Gzb","number":199,"state":"closed","title":"chore(deps): bump the python-dependencies group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-03-18T06:22:45.000Z","author_association":null,"state_reason":null,"created_at":"2026-03-16T09:31:30.000Z","updated_at":"2026-03-18T06:22:47.000Z","time_to_close":161475,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-dependencies","update_count":20,"packages":[{"name":"pyrotgfork","old_version":"2.2.19","new_version":"2.2.21","repository_url":"https://github.com/TelegramPlayGround/Pyrogram"},{"name":"scrapling","old_version":"0.4.1","new_version":"0.4.2","repository_url":"https://github.com/D4Vinci/Scrapling"},{"name":"json-repair","old_version":"0.58.1","new_version":"0.58.5","repository_url":"https://github.com/mangiucugna/json_repair"},{"name":"redis","old_version":"7.2.1","new_version":"7.3.0","repository_url":"https://github.com/redis/redis-py"},{"name":"pymupdf","old_version":"1.27.1","new_version":"1.27.2","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"uvicorn","old_version":"0.41.0","new_version":"0.42.0"},{"name":"pyjwt","old_version":"2.11.0","new_version":"2.12.1","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"ruff","old_version":"0.15.4","new_version":"0.15.6","repository_url":"https://github.com/astral-sh/ruff"},{"name":"cachetools","old_version":"7.0.3","new_version":"7.0.5","repository_url":"https://github.com/tkem/cachetools"},{"name":"charset-normalizer","old_version":"3.4.4","new_version":"3.4.6","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"crawlee","old_version":"1.4.0","new_version":"1.5.0","repository_url":"https://github.com/apify/crawlee-python"},{"name":"filelock","old_version":"3.25.0","new_version":"3.25.2","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"impit","old_version":"0.11.0","new_version":"0.12.0","repository_url":"https://github.com/apify/impit"},{"name":"numpy","old_version":"2.4.2","new_version":"2.4.3","repository_url":"https://github.com/numpy/numpy"},{"name":"pydantic-core","old_version":"2.41.5","new_version":"2.42.0","repository_url":"https://github.com/pydantic/pydantic-core"},{"name":"setuptools","old_version":"82.0.0","new_version":"82.0.1","repository_url":"https://github.com/pypa/setuptools"},{"name":"tld","old_version":"0.13.1","new_version":"0.13.2","repository_url":"https://github.com/barseghyanartur/tld"},{"name":"wrapt","old_version":"2.1.1","new_version":"2.1.2","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"identify","old_version":"2.6.17","new_version":"2.6.18","repository_url":"https://github.com/pre-commit/identify"},{"name":"platformdirs","old_version":"4.9.2","new_version":"4.9.4","repository_url":"https://github.com/tox-dev/platformdirs"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dependencies group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pyrotgfork](https://github.com/TelegramPlayGround/Pyrogram) | `2.2.19` | `2.2.21` |\n| [scrapling](https://github.com/D4Vinci/Scrapling) | `0.4.1` | `0.4.2` |\n| [json-repair](https://github.com/mangiucugna/json_repair) | `0.58.1` | `0.58.5` |\n| [redis](https://github.com/redis/redis-py) | `7.2.1` | `7.3.0` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.27.1` | `1.27.2` |\n| [uvicorn[standard]](https://github.com/Kludex/uvicorn) | `0.41.0` | `0.42.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.11.0` | `2.12.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.4` | `0.15.6` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.0.3` | `7.0.5` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.4` | `3.4.6` |\n| [crawlee](https://github.com/apify/crawlee-python) | `1.4.0` | `1.5.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.25.0` | `3.25.2` |\n| [impit](https://github.com/apify/impit) | `0.11.0` | `0.12.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.2` | `2.4.3` |\n| [pydantic-core](https://github.com/pydantic/pydantic-core) | `2.41.5` | `2.42.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.0` | `82.0.1` |\n| [tld](https://github.com/barseghyanartur/tld) | `0.13.1` | `0.13.2` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `2.1.1` | `2.1.2` |\n| [identify](https://github.com/pre-commit/identify) | `2.6.17` | `2.6.18` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.2` | `4.9.4` |\n\n\nUpdates `pyrotgfork` from 2.2.19 to 2.2.21\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/6faa5faa47b8843557698b1fa26a504f8db48c64\"\u003e\u003ccode\u003e6faa5fa\u003c/code\u003e\u003c/a\u003e Update Pyrogram to v2.2.21\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/91fd584f942b628cc575d3a16582919d7ba323a1\"\u003e\u003ccode\u003e91fd584\u003c/code\u003e\u003c/a\u003e fix: edge case in sending date_time_format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/cf41eb2b624b24fc5b517efa2501fca80f4fe9e4\"\u003e\u003ccode\u003ecf41eb2\u003c/code\u003e\u003c/a\u003e Change administrator title parameter to 'tag'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/18f2d25ed8bf1352d671c1e6fc0b7cd60cea8bfe\"\u003e\u003ccode\u003e18f2d25\u003c/code\u003e\u003c/a\u003e Update Pyrogram to v2.2.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/79dae45488a82eabd481340d9c680d2684fc684a\"\u003e\u003ccode\u003e79dae45\u003c/code\u003e\u003c/a\u003e Added the MessageEntity type “date_time”, allowing to show a formatted date a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/6bdf57a33e664da14541756148f0ea3dc89067a8\"\u003e\u003ccode\u003e6bdf57a\u003c/code\u003e\u003c/a\u003e Added support for setting email during authorization\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/TelegramPlayground/pyrogram/commit/d1528d0eb0390c714e0c2fb0652834da86397eff\"\u003e\u003ccode\u003ed1528d0\u003c/code\u003e\u003c/a\u003e Added CHAT_OWNER_LEFT, CHAT_OWNER_CHANGED, CHAT_HAS_PROTECTED_CONTENT_TOGGLED...\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/TelegramPlayGround/Pyrogram/compare/v2.2.19...v2.2.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `scrapling` from 0.4.1 to 0.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/D4Vinci/Scrapling/releases\"\u003escrapling's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v0.4.2\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eA new maintenance update with important changes\u003c/strong\u003e\u003c/p\u003e\n\u003ch4\u003eBug fixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eThe function \u003ccode\u003eget_all_text()\u003c/code\u003e now captures tail text nodes. This will make the MCP server and commands see text that was missed before (\u003ca href=\"https://redirect.github.com/D4Vinci/Scrapling/pull/168\"\u003e#168\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/mhillebrand\"\u003e\u003ccode\u003e@​mhillebrand\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReferer now returns a bare Google url instead of a Google search URL. The previous logic was incorrect and may have produced a fingerprinting signal (\u003ca href=\"https://redirect.github.com/D4Vinci/Scrapling/pull/179\"\u003e#179\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/Bortlesboat\"\u003e\u003ccode\u003e@​Bortlesboat\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed an issue with extra flags concatenation in all browsers. Thanks \u003ca href=\"https://github.com/rostchri\"\u003e\u003ccode\u003e@​rostchri\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed a type hints issue with Python versions below 3.12 that caused it to crash. (Solves \u003ca href=\"https://redirect.github.com/D4Vinci/Scrapling/issues/163\"\u003e#163\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdded an Agent Skill for Claude Code / OpenClaw and other AI agentic tools.\u003c/li\u003e\n\u003cli\u003eAdded the Agent Skill to Clawhub.\u003c/li\u003e\n\u003cli\u003eUpdates all browsers and Playwright versions to the latest.\u003c/li\u003e\n\u003cli\u003eAdded a French translation to the main README file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cem\u003e🙏 Special thanks to the community for all the continuous testing and feedback\u003c/em\u003e\u003c/p\u003e\n\u003chr /\u003e\n\u003ch3\u003eBig shoutout to our Platinum Sponsors\u003c/h3\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\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/D4Vinci/Scrapling/commit/19c21c17eee7cac104ca116c77dc40c15219f294\"\u003e\u003ccode\u003e19c21c1\u003c/code\u003e\u003c/a\u003e v0.4.2 (\u003ca href=\"https://redirect.github.com/D4Vinci/Scrapling/issues/183\"\u003e#183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/6ec40ad19da84cef683ac5f45fed446bb0d38e99\"\u003e\u003ccode\u003e6ec40ad\u003c/code\u003e\u003c/a\u003e docs: remove a sponsor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/f80743a97bbd72b49bcd5edca4e4780bb8c2a4b5\"\u003e\u003ccode\u003ef80743a\u003c/code\u003e\u003c/a\u003e style: remove unused import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/66e0e7af576b2de767277161df6eebb51b83f09f\"\u003e\u003ccode\u003e66e0e7a\u003c/code\u003e\u003c/a\u003e fix(agent): update the agent skill zip file with the new version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/73832f9dfe6bfcaab2e3cbf9b1be34118ee97520\"\u003e\u003ccode\u003e73832f9\u003c/code\u003e\u003c/a\u003e docs: update the website to reflect the google referer logic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/d48ac78c791bb8ca0c070054cf64771da2fe9fab\"\u003e\u003ccode\u003ed48ac78\u003c/code\u003e\u003c/a\u003e test: update tests accordingly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/8e3bf89e6cb98aeea6223884404fe25df898513d\"\u003e\u003ccode\u003e8e3bf89\u003c/code\u003e\u003c/a\u003e fix(agent): update the agent skills docs and version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/a929de6ca4f6f84f09b42226ee5670643cffccc8\"\u003e\u003ccode\u003ea929de6\u003c/code\u003e\u003c/a\u003e fix: update code and docstrings to remove the old google referer logic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/b547e04207a9b691bc0dbffcc3da593dc7481070\"\u003e\u003ccode\u003eb547e04\u003c/code\u003e\u003c/a\u003e ops: update playwright pinned version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/D4Vinci/Scrapling/commit/27409927a3557de3571b2c280507956b2f53f398\"\u003e\u003ccode\u003e2740992\u003c/code\u003e\u003c/a\u003e build: pump up deps and browsers versions\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/D4Vinci/Scrapling/compare/v0.4.1...v0.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `json-repair` from 0.58.1 to 0.58.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mangiucugna/json_repair/releases\"\u003ejson-repair's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 0.58.5\u003c/h2\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eImproved parser performance, especially for common JSON containing ordinary quoted strings. Profiler indicates a 60% improvement in performance.\u003c/li\u003e\n\u003cli\u003eHardened schema-guided repair behavior, including safer salvage handling for mixed type unions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eThink about sponsoring this library!\u003c/h1\u003e\n\u003cp\u003eThis library is free for everyone and it's maintained and developed as a side project so, if you find this library useful for your work, consider offering me a beer via this link: \u003ca href=\"https://github.com/sponsors/mangiucugna\"\u003ehttps://github.com/sponsors/mangiucugna\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease 0.58.4\u003c/h2\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003ev0.58.3 added some regressions in which \u003ccode\u003esalvage\u003c/code\u003e mode could repair \u003cem\u003eless\u003c/em\u003e than \u003ccode\u003estandard\u003c/code\u003e mode. Fixed that regression and some minor changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eThink about sponsoring this library!\u003c/h1\u003e\n\u003cp\u003eThis library is free for everyone and it's maintained and developed as a side project so, if you find this library useful for your work, consider offering me a beer via this link: \u003ca href=\"https://github.com/sponsors/mangiucugna\"\u003ehttps://github.com/sponsors/mangiucugna\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease 0.58.3\u003c/h2\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/mangiucugna/json_repair/issues/181\"\u003e#181\u003c/a\u003e, fix another bug in duplicate-key dedup for array objects\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eThink about sponsoring this library!\u003c/h1\u003e\n\u003cp\u003eThis library is free for everyone and it's maintained and developed as a side project so, if you find this library useful for your work, consider offering me a beer via this link: \u003ca href=\"https://github.com/sponsors/mangiucugna\"\u003ehttps://github.com/sponsors/mangiucugna\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease 0.58.2\u003c/h2\u003e\n\u003ch1\u003eFixed\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ca href=\"https://redirect.github.com/mangiucugna/json_repair/issues/181\"\u003e#181\u003c/a\u003e, fix a corner in case in which duplicate keys won't be deduplicated and instead split inside an array.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eThink about sponsoring this library!\u003c/h1\u003e\n\u003cp\u003eThis library is free for everyone and it's maintained and developed as a side project so, if you find this library useful for your work, consider offering me a beer via this link: \u003ca href=\"https://github.com/sponsors/mangiucugna\"\u003ehttps://github.com/sponsors/mangiucugna\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/mangiucugna/json_repair/commit/16e6b1a3f6c7288672f79bc8bb4c815a228cf859\"\u003e\u003ccode\u003e16e6b1a\u003c/code\u003e\u003c/a\u003e Bump patch version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/0a7ad6679249d274afeaba1d414b8541af8c5fb7\"\u003e\u003ccode\u003e0a7ad66\u003c/code\u003e\u003c/a\u003e Improve parser hot-path performance\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/294e425e596377e19ada0444b5b06eed354d5e2d\"\u003e\u003ccode\u003e294e425\u003c/code\u003e\u003c/a\u003e Tighten Ruff coverage and package boundaries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/b2486d793bee88440750e1c2f22c54c1dfb75a68\"\u003e\u003ccode\u003eb2486d7\u003c/code\u003e\u003c/a\u003e Improve schema performance coverage and trim parser overhead\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/a210ec4ec74dbe26a46d2aecf3190076cb55d8b6\"\u003e\u003ccode\u003ea210ec4\u003c/code\u003e\u003c/a\u003e Harden patternProperties matching without regex execution\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/158efed1f8256b34e99d235a1dd48550a9f029cb\"\u003e\u003ccode\u003e158efed\u003c/code\u003e\u003c/a\u003e Bump 0.58.4 and harden schema salvage behavior\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/f6332358657bc57f730d0548058846ba6aed9089\"\u003e\u003ccode\u003ef633235\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mangiucugna/json_repair/issues/182\"\u003e#182\u003c/a\u003e from mangiucugna/codex/ci-packaging-chores\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/e267ca6eba980b054a369fb9274ffad41e4485f7\"\u003e\u003ccode\u003ee267ca6\u003c/code\u003e\u003c/a\u003e chore(ci): simplify uv workflow steps and package checks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/25a0883f7f1051040f25543a93ed764646594d20\"\u003e\u003ccode\u003e25a0883\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/mangiucugna/json_repair/issues/181\"\u003e#181\u003c/a\u003e: align duplicate-key dedup for array objects\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mangiucugna/json_repair/commit/ce205abc44b8adff483889193fb1b4a56f476a00\"\u003e\u003ccode\u003ece205ab\u003c/code\u003e\u003c/a\u003e ci: fix PythonAnywhere sync workflow_run condition\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mangiucugna/json_repair/compare/v0.58.1...v0.58.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 7.2.1 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/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.3.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eOpenTelemetry Native Metrics Support for asynchronous clients\u003c/strong\u003e\nAdded comprehensive OpenTelemetry metrics support for asynchronous clients following the \u003ca href=\"https://opentelemetry.io/docs/specs/semconv/database/database-metrics/\"\u003eOpenTelemetry Database Client Semantic Conventions\u003c/a\u003e.\nMetric groups include:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCommand metrics: Operation duration with retry tracking\u003c/li\u003e\n\u003cli\u003eConnection basic: Connection count and creation time\u003c/li\u003e\n\u003cli\u003eResiliency: Errors, handoffs, timeout relaxation\u003c/li\u003e\n\u003cli\u003eConnection advanced: Wait time and use time\u003c/li\u003e\n\u003cli\u003ePubsub metrics: Published and received messages\u003c/li\u003e\n\u003cli\u003eStream metrics: Processing duration and maintenance notifications\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded OTel instrumentation and metrics export for async client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3977\"\u003e#3977\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[async] Adding access to cluster client's nodes_manager and set_response_callback in ClusterPipeline objects (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3989\"\u003e#3989\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(connection): Ensure we have an initialized protocol in connection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3981\"\u003e#3981\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: use KeysT for blpop and brpop keys parameter type annotation (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3987\"\u003e#3987\u003c/a\u003e \u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3990\"\u003e#3990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3985\"\u003e#3985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: replace 3 bare except clauses with except Exception (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3980\"\u003e#3980\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/turanalmammadov\"\u003e\u003ccode\u003e@​turanalmammadov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/haosenwang1018\"\u003e\u003ccode\u003e@​haosenwang1018\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/Medno\"\u003e\u003ccode\u003e@​Medno\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\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/8ecbc7a728792ab9c71078cb330a64c225cb3351\"\u003e\u003ccode\u003e8ecbc7a\u003c/code\u003e\u003c/a\u003e Updating lib version to 7.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/11043df86ed5f892cde1f34f08f3450f13bb6339\"\u003e\u003ccode\u003e11043df\u003c/code\u003e\u003c/a\u003e typing: accept single-key input for blpop and brpop (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3990\"\u003e#3990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d9581250202123ebf68d299e8f2ea79fa9bd7210\"\u003e\u003ccode\u003ed958125\u003c/code\u003e\u003c/a\u003e fix: use KeysT for blpop and brpop keys parameter type annotation (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3987\"\u003e#3987\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/75bf91b8a28bfc3f8417e58d1b78bd112ffcf6de\"\u003e\u003ccode\u003e75bf91b\u003c/code\u003e\u003c/a\u003e [async] Adding access to cluster client's nodes_manager and set_response_call...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/abf5bcb2ded3f393cd3d74803b058df325e3755c\"\u003e\u003ccode\u003eabf5bcb\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3985\"\u003e#3985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/5b0303bf90792cfdfff951f446c71ec7baf83e0e\"\u003e\u003ccode\u003e5b0303b\u003c/code\u003e\u003c/a\u003e fix: replace 3 bare except clauses with except Exception (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3980\"\u003e#3980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/e9fba8689f74e4aea45c8b9d75e517e29c54a76a\"\u003e\u003ccode\u003ee9fba86\u003c/code\u003e\u003c/a\u003e Added OTel instrumentation and metrics export for async client (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3977\"\u003e#3977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/7ce513d262288fb2d79a1d59dff0cf5ff0cb13b0\"\u003e\u003ccode\u003e7ce513d\u003c/code\u003e\u003c/a\u003e fix(connection): Ensure we have an initialized protocol in connection (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3981\"\u003e#3981\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/8e3a5b2f10677c58951fd04f79db1802f79a9bea\"\u003e\u003ccode\u003e8e3a5b2\u003c/code\u003e\u003c/a\u003e remove remaining imports of typing_extensions (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3873\"\u003e#3873\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/5b46430e23748d85140b143cbce02523e284482e\"\u003e\u003ccode\u003e5b46430\u003c/code\u003e\u003c/a\u003e Hold references to ClusterNode disconnect task (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3826\"\u003e#3826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v7.2.1...v7.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.27.1 to 1.27.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4903\"\u003e#4903\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\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/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4903 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4903\u0026gt;\u003c/code\u003e_: Typing broken because of *_forward_decl\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRetrospectively marked \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4907\"\u003e#4907\u003c/a\u003e as fixed in pymupdf-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved get_textpage_ocr().\u003c/p\u003e\n\u003cp\u003eFor partial OCR, \u003cstrong\u003eall\u003c/strong\u003e page areas outside legible text are now OCRed, not\njust those within images. This means that OCR will now also be performed\nfor vector graphics, and for text containing illegible characters.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.1\u003c/strong\u003e (2026-02-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.27.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4599 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4599\u0026gt;\u003c/code\u003e_: page.cluster_drawings extract a lot of small clusters once upgraded to 1.26\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4751 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4751\u0026gt;\u003c/code\u003e_: Memory leaking in page.widgets()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4762 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4762\u0026gt;\u003c/code\u003e_: Importing pymupdf make pillow segmentation fault for converting jp2 file on ArchLinux\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4790 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4790\u0026gt;\u003c/code\u003e_: Problem to delete pages on PDF\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4857 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4857\u0026gt;\u003c/code\u003e_: Package is missing py.typed file required for type checking\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4886 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4886\u0026gt;\u003c/code\u003e_: \u003c!-- raw HTML omitted --\u003e width attribute behaviour seems wrong\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4907 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4907\u0026gt;\u003c/code\u003e_: signal 11:SIGSEGV while using display_list.get_textpage()\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003epymupdf.TEXT_CLIP\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRemoved support for mupdf \u0026lt; 1.26.\u003c/li\u003e\n\u003cli\u003eNew arg \u003ccode\u003eraise_on_repair\u003c/code\u003e in \u003ccode\u003eDocument.save()\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eNew method \u003ccode\u003eDocument.repair()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.26.7\u003c/strong\u003e (2025-12-11)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUse MuPDF-1.26.12.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4801 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4801\u0026gt;\u003c/code\u003e_: Build failure dumping all environment variables\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/4bfc665a89f0a2b02897e48f20500d09eab17b6b\"\u003e\u003ccode\u003e4bfc665\u003c/code\u003e\u003c/a\u003e changes.txt: added info about improvements to get_textpage_ocr().\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d6fb27d64e42f2058cfbc66177cc9feb77dc44a9\"\u003e\u003ccode\u003ed6fb27d\u003c/code\u003e\u003c/a\u003e Updates for release of 1.27.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/015680eb986d5dea994bc0e2fd9eebda7f26783b\"\u003e\u003ccode\u003e015680e\u003c/code\u003e\u003c/a\u003e Docs: fixes the default system light mode rendering of the page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/447ff2c32d0323552da5fd0de909fb149c055278\"\u003e\u003ccode\u003e447ff2c\u003c/code\u003e\u003c/a\u003e Rework textpage_ocr\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/1d272d7088682645dd68c8d5175f7e011da5b714\"\u003e\u003ccode\u003e1d272d7\u003c/code\u003e\u003c/a\u003e setup.py: avoid swig director problem on macos with python\u0026lt;3.13.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/30eb43f5daec69416f2232472e74f578a7b3fff2\"\u003e\u003ccode\u003e30eb43f\u003c/code\u003e\u003c/a\u003e setup.py: use default swig for pyodide.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/fcd7fe07db4ab6eba0c3aeb75ca0da35e382fa4b\"\u003e\u003ccode\u003efcd7fe0\u003c/code\u003e\u003c/a\u003e setup.py: use latest swig on macos.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/967b6f82d9ff8b462a16cfe97d3fc267a203da9d\"\u003e\u003ccode\u003e967b6f8\u003c/code\u003e\u003c/a\u003e setup.py: fixed handling of --clean if mupdf is not within pymupdf checkout.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d53ed39df1cc481f72d4bb08420e692fab0bd2fa\"\u003e\u003ccode\u003ed53ed39\u003c/code\u003e\u003c/a\u003e tests/conftest.py: add some platform details to any junit .xml file.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/fc56e4589209d55e73f1b758e59b63b08a47931f\"\u003e\u003ccode\u003efc56e45\u003c/code\u003e\u003c/a\u003e setup.py: removed special casing of python\u0026gt;=3.13 with py_limited_api.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.27.1...1.27.2\"\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.41.0 to 0.42.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn[standard]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.42.0\u003c/h2\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for request body accumulation to avoid O(n^2) allocation on fragmented bodies (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2845\"\u003e#2845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEscape brackets and backslash in httptools \u003ccode\u003eHEADER_RE\u003c/code\u003e regex (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2824\"\u003e#2824\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix multiple issues in websockets sans-io implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2825\"\u003e#2825\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2825\"\u003eKludex/uvicorn#2825\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.41.0...0.42.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.41.0...0.42.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/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.42.0 (March 16, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for request body accumulation to avoid O(n^2) allocation on fragmented bodies (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2845\"\u003e#2845\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEscape brackets and backslash in httptools \u003ccode\u003eHEADER_RE\u003c/code\u003e regex (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2824\"\u003e#2824\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix multiple issues in websockets sans-io implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2825\"\u003e#2825\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/02bed6f8c38e74f684bb0e572977a9bfdc1f6fea\"\u003e\u003ccode\u003e02bed6f\u003c/code\u003e\u003c/a\u003e Version 0.42.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2852\"\u003e#2852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/d8f25013161d8206e129e39bf48432d3a85e1744\"\u003e\u003ccode\u003ed8f2501\u003c/code\u003e\u003c/a\u003e chore: pre-create Config objects in benchmarks to measure protocol hot paths ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9dbb7836bb0fdb446d083ecd8dc5a2a95bb96b98\"\u003e\u003ccode\u003e9dbb783\u003c/code\u003e\u003c/a\u003e Add WebSocket protocol benchmarks for wsproto and websockets-sansio (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2849\"\u003e#2849\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b3c69da8c1a36e1834e614abe38243671e156077\"\u003e\u003ccode\u003eb3c69da\u003c/code\u003e\u003c/a\u003e Use bytearray for request body accumulation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2845\"\u003e#2845\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3f3ebee20f46504a3f7279dd72f9c24ce9070b11\"\u003e\u003ccode\u003e3f3ebee\u003c/code\u003e\u003c/a\u003e Disable \u003ccode\u003epytest-xdist\u003c/code\u003e for CodSpeed benchmark runs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2847\"\u003e#2847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/d072de754f825bee4710363dd49d41efd5285dcc\"\u003e\u003ccode\u003ed072de7\u003c/code\u003e\u003c/a\u003e Add fragmented body benchmark for chunked body accumulation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2846\"\u003e#2846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/e300c2c75d71bea6f8d1799ca6f182f1e5583aaa\"\u003e\u003ccode\u003ee300c2c\u003c/code\u003e\u003c/a\u003e Add CodSpeed benchmark suite for HTTP protocol hot paths (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2844\"\u003e#2844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1fa697651bacf10d72f74de104ead814ce6fcdc0\"\u003e\u003ccode\u003e1fa6976\u003c/code\u003e\u003c/a\u003e Escape brackets and backslash in httptools HEADER_RE regex (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2824\"\u003e#2824\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/59ec1de7a4f07afbd139812f033f3af8b784de74\"\u003e\u003ccode\u003e59ec1de\u003c/code\u003e\u003c/a\u003e Fix multiple issues in websockets sansio implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2825\"\u003e#2825\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2fc0efcdd958abd3adbe6ea19682408d6b2e1b18\"\u003e\u003ccode\u003e2fc0efc\u003c/code\u003e\u003c/a\u003e Clarify Windows asyncio event loop selection in docs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2843\"\u003e#2843\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.41.0...0.42.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.11.0 to 2.12.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/releases\"\u003epyjwt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.12.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd typing_extensions dependency for Python \u0026lt; 3.11 by \u003ca href=\"https://github.com/jpadilla\"\u003e\u003ccode\u003e@​jpadilla\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1151\"\u003ejpadilla/pyjwt#1151\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\"\u003ehttps://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.12.0\u003c/h2\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eValidate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by \u003ca href=\"https://github.com/dmbs335\"\u003e\u003ccode\u003e@​dmbs335\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f\"\u003eGHSA-752w-5fwx-jx9f\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1132\"\u003ejpadilla/pyjwt#1132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(docs): fix docs build by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1137\"\u003ejpadilla/pyjwt#1137\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAnnotate PyJWKSet.keys for pyright by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1134\"\u003ejpadilla/pyjwt#1134\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: close HTTPError to prevent ResourceWarning on Python 3.14 by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1133\"\u003ejpadilla/pyjwt#1133\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: remove superfluous constants by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1136\"\u003ejpadilla/pyjwt#1136\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1135\"\u003ejpadilla/pyjwt#1135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(tests): enable mypy by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1138\"\u003ejpadilla/pyjwt#1138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 7 to 8 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1142\"\u003ejpadilla/pyjwt#1142\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1141\"\u003ejpadilla/pyjwt#1141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1145\"\u003ejpadilla/pyjwt#1145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: do not store reference to algorithms dict on PyJWK by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1143\"\u003ejpadilla/pyjwt#1143\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse PyJWK algorithm when encoding without explicit algorithm by \u003ca href=\"https://github.com/jpadilla\"\u003e\u003ccode\u003e@​jpadilla\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1148\"\u003ejpadilla/pyjwt#1148\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/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1137\"\u003ejpadilla/pyjwt#1137\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/jpadilla/pyjwt/pull/1133\"\u003ejpadilla/pyjwt#1133\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0\"\u003ehttps://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.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/jpadilla/pyjwt/blob/master/CHANGELOG.rst\"\u003epyjwt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ccode\u003ev2.12.1 \u0026lt;https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\u0026gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Add missing ``typing_extensions`` dependency for Python \u0026lt; 3.11 in `[#1150](https://github.com/jpadilla/pyjwt/issues/1150) \u0026lt;https://github.com/jpadilla/pyjwt/issues/1150\u0026gt;`__\n\u003ch2\u003e\u003ccode\u003ev2.12.0 \u0026amp;lt;https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0\u0026amp;gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eFixed\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAnnotate PyJWKSet.keys for pyright by \u003ca href=\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ccode\u003e[#1134](https://github.com/jpadilla/pyjwt/issues/1134) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1134\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003cli\u003eClose \u003ccode\u003eHTTPError\u003c/code\u003e response to prevent \u003ccode\u003eResourceWarning\u003c/code\u003e on Python 3.14 by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e in \u003ccode\u003e[#1133](https://github.com/jpadilla/pyjwt/issues/1133) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1133\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003cli\u003eDo not keep \u003ccode\u003ealgorithms\u003c/code\u003e dict in PyJWK instances by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ccode\u003e[#1143](https://github.com/jpadilla/pyjwt/issues/1143) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1143\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003cli\u003eValidate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by \u003ca href=\"https://github.com/dmbs335\"\u003e\u003ccode\u003e@​dmbs335\u003c/code\u003e\u003c/a\u003e in \u003ccode\u003eGHSA-752w-5fwx-jx9f \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003cli\u003eUse PyJWK algorithm when encoding without explicit algorithm in \u003ccode\u003e[#1148](https://github.com/jpadilla/pyjwt/issues/1148) \u0026lt;https://github.com/jpadilla/pyjwt/pull/1148\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAdded\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Docs: Add ``PyJWKClient`` API reference and document the two-tier caching system (JWK Set cache and signing key LRU cache).\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/a4e1a3d1218b01c5806420b8f16d9308ac4adc30\"\u003e\u003ccode\u003ea4e1a3d\u003c/code\u003e\u003c/a\u003e Add typing_extensions dependency for Python \u0026lt; 3.11 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/bd9700cca7f9258fadcc429c1034e508025931f2\"\u003e\u003ccode\u003ebd9700c\u003c/code\u003e\u003c/a\u003e Use PyJWK algorithm when encoding without explicit algorithm (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1148\"\u003e#1148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/051ea341b5573fe3edcd53042f347929b92c2b92\"\u003e\u003ccode\u003e051ea34\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/1451d70eca2059bc472703692f0bb0777bc0fe93\"\u003e\u003ccode\u003e1451d70\u003c/code\u003e\u003c/a\u003e fix: do not store reference to algorithms dict on PyJWK (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1143\"\u003e#1143\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/f3ba74c106df9ce10e272dfaad96acb4ab3ef5a5\"\u003e\u003ccode\u003ef3ba74c\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1145\"\u003e#1145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/0318ffa7b156b01600376e38952bf961382e0724\"\u003e\u003ccode\u003e0318ffa\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1141\"\u003e#1141\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/a52753db3c1075ac01337fa8b7cc92b13a19ac09\"\u003e\u003ccode\u003ea52753d\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7 to 8 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1142\"\u003e#1142\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/b85050f1d444c6828bb4618ee764443b0a3f5d18\"\u003e\u003ccode\u003eb85050f\u003c/code\u003e\u003c/a\u003e chore(tests): enable mypy (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1138\"\u003e#1138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/1272b264779717cc481c8341f321a7fc8b3aaba6\"\u003e\u003ccode\u003e1272b26\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1135\"\u003e#1135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/99a87287c26cb97c94399084ee4186ee52207a7f\"\u003e\u003ccode\u003e99a8728\u003c/code\u003e\u003c/a\u003e chore: remove superfluous constants (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1136\"\u003e#1136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.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.15.4 to 0.15.6\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.15.6\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-03-12.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003elazy\u003c/code\u003e import parsing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23755\"\u003e#23755\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for star-unpacking of comprehensions (PEP 798) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23788\"\u003e#23788\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject semantic syntax errors for lazy imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23757\"\u003e#23757\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop a few rules from the preview default set (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23879\"\u003e#23879\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Flag \u003ccode\u003eVariable.get()\u003c/code\u003e calls outside of task execution context (\u003ccode\u003eAIR003\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23584\"\u003e#23584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Flag runtime-varying values in DAG/task constructor arguments (\u003ccode\u003eAIR304\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23631\"\u003e#23631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Implement \u003ccode\u003edelattr-with-constant\u003c/code\u003e (\u003ccode\u003eB043\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23737\"\u003e#23737\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Add \u003ccode\u003eTID254\u003c/code\u003e to enforce lazy imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23777\"\u003e#23777\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Allow users to ban lazy imports with \u003ccode\u003eTID254\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23847\"\u003e#23847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eisort\u003c/code\u003e] Retain \u003ccode\u003elazy\u003c/code\u003e keyword when sorting imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23762\"\u003e#23762\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e automatically (\u003ccode\u003eUP006\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23260\"\u003e#23260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Support \u003ccode\u003enewline\u003c/code\u003e parameter in \u003ccode\u003eFURB101\u003c/code\u003e for Python 3.13+ (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23754\"\u003e#23754\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003eos-path-commonprefix\u003c/code\u003e (\u003ccode\u003eRUF071\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23814\"\u003e#23814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add unsafe fix for os-path-commonprefix (\u003ccode\u003eRUF071\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23852\"\u003e#23852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Limit \u003ccode\u003eRUF036\u003c/code\u003e to typing contexts; make it unsafe for non-typing-only (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23765\"\u003e#23765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Use starred unpacking for \u003ccode\u003eRUF017\u003c/code\u003e in Python 3.15+ (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23789\"\u003e#23789\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e--add-noqa\u003c/code\u003e creating unwanted leading whitespace (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23773\"\u003e#23773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e--add-noqa\u003c/code\u003e breaking shebangs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23577\"\u003e#23577\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[formatter] Fix lambda body formatting for multiline calls and subscripts (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23866\"\u003e#23866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[formatter] Preserve required annotation parentheses in annotated assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23865\"\u003e#23865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[formatter] Preserve type-expression parentheses in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23867\"\u003e#23867\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-annotations\u003c/code\u003e] Fix stack overflow in \u003ccode\u003eANN401\u003c/code\u003e on quoted annotations with escape sequences (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23912\"\u003e#23912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epep8-naming\u003c/code\u003e] Check naming conventions in \u003ccode\u003ematch\u003c/code\u003e pattern bindings (\u003ccode\u003eN806\u003c/code\u003e, \u003ccode\u003eN815\u003c/code\u003e, \u003ccode\u003eN816\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23899\"\u003e#23899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Fix comment duplication in fixes (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23729\"\u003e#23729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Properly trigger \u003ccode\u003esuper\u003c/code\u003e change in nested class (\u003ccode\u003eUP008\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22677\"\u003e#22677\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Avoid syntax errors in \u003ccode\u003eRUF036\u003c/code\u003e fixes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23764\"\u003e#23764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Flag \u003ccode\u003eS501\u003c/code\u003e with \u003ccode\u003erequests.request\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23873\"\u003e#23873\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Fix WSL detection in non-Docker containers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22879\"\u003e#22879\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-print\u003c/code\u003e] Ignore \u003ccode\u003epprint\u003c/code\u003e calls with \u003ccode\u003estream=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23787\"\u003e#23787\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate docs for Markdown code block formatting (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23871\"\u003e#23871\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix misleading description for \u003ccode\u003eB904\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23731\"\u003e#23731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\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/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.15.6\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-03-12.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003elazy\u003c/code\u003e import parsing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23755\"\u003e#23755\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for star-unpacking of comprehensions (PEP 798) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23788\"\u003e#23788\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject semantic syntax errors for lazy imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23757\"\u003e#23757\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop a few rules from the preview default set (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23879\"\u003e#23879\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Flag \u003ccode\u003eVariable.get()\u003c/code\u003e calls outside of task execution context (\u003ccode\u003eAIR003\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23584\"\u003e#23584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Flag runtime-varying values in DAG/task constructor arguments (\u003ccode\u003eAIR304\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23631\"\u003e#23631\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Implement \u003ccode\u003edelattr-with-constant\u003c/code\u003e (\u003ccode\u003eB043\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23737\"\u003e#23737\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Add \u003ccode\u003eTID254\u003c/code\u003e to enforce lazy imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23777\"\u003e#23777\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Allow users to ban lazy imports with \u003ccode\u003eTID254\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23847\"\u003e#23847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eisort\u003c/code\u003e] Retain \u003ccode\u003elazy\u003c/code\u003e keyword when sorting imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23762\"\u003e#23762\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e automatically (\u003ccode\u003eUP006\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23260\"\u003e#23260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Support \u003ccode\u003enewline\u003c/code\u003e parameter in \u003ccode\u003eFURB101\u003c/code\u003e for Python 3.13+ (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23754\"\u003e#23754\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003eos-path-commonprefix\u003c/code\u003e (\u003ccode\u003eRUF071\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23814\"\u003e#23814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add unsafe fix for os-path-commonprefix (\u003ccode\u003eRUF071\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23852\"\u003e#23852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Limit \u003ccode\u003eRUF036\u003c/code\u003e to typing contexts; make it unsafe for non-typing-only (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23765\"\u003e#23765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Use starred unpacking for \u003ccode\u003eRUF017\u003c/code\u003e in Python 3.15+ (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23789\"\u003e#23789\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e--add-noqa\u003c/code\u003e creating unwanted leading whitespace (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23773\"\u003e#23773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e--add-noqa\u003c/code\u003e breaking shebangs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23577\"\u003e#23577\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[formatter] Fix lambda body formatting for multiline calls and subscripts (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23866\"\u003e#23866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[formatter] Preserve required annotation parentheses in annotated assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23865\"\u003e#23865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[formatter] Preserve type-expression parentheses in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23867\"\u003e#23867\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-annotations\u003c/code\u003e] Fix stack overflow in \u003ccode\u003eANN401\u003c/code\u003e on quoted annotations with escape sequences (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23912\"\u003e#23912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epep8-naming\u003c/code\u003e] Check naming conventions in \u003ccode\u003ematch\u003c/code\u003e pattern bindings (\u003ccode\u003eN806\u003c/code\u003e, \u003ccode\u003eN815\u003c/code\u003e, \u003ccode\u003eN816\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23899\"\u003e#23899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Fix comment duplication in fixes (\u003ccode\u003ePERF401\u003c/code\u003e, \u003ccode\u003ePERF403\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23729\"\u003e#23729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Properly trigger \u003ccode\u003esuper\u003c/code\u003e change in nested class (\u003ccode\u003eUP008\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22677\"\u003e#22677\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Avoid syntax errors in \u003ccode\u003eRUF036\u003c/code\u003e fixes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23764\"\u003e#23764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Flag \u003ccode\u003eS501\u003c/code\u003e with \u003ccode\u003erequests.request\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23873\"\u003e#23873\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Fix WSL detection in non-Docker containers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22879\"\u003e#22879\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-print\u003c/code\u003e] Ignore \u003ccode\u003epprint\u003c/code\u003e calls with \u003ccode\u003estream=\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23787\"\u003e#23787\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate docs for Markdown code block formatting (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23871\"\u003e#23871\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix misleading description for \u003ccode\u003eB904\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23731\"\u003e#23731\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/zsol\"\u003e\u003ccode\u003e@​zsol\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/e4c7f357777a2fdd34dbe6a98b1b7d3e7488f675\"\u003e\u003ccode\u003ee4c7f35\u003c/code\u003e\u003c/a\u003e Bump 0.15.6 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23919\"\u003e#23919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/edfe6c17a493669227da45ce7edc786208d9d0b0\"\u003e\u003ccode\u003eedfe6c1\u003c/code\u003e\u003c/a\u003e [ty] Narrow type context during collection literal inference (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23844\"\u003e#23844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/dd16d689abd9d0fa1caf4316e70479fd422b6142\"\u003e\u003ccode\u003edd16d68\u003c/code\u003e\u003c/a\u003e Exclude broken symlink in ecosystem check (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23921\"\u003e#23921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3f94c6ac6397cdc3160459d9d6e3892e3f3242dd\"\u003e\u003ccode\u003e3f94c6a\u003c/code\u003e\u003c/a\u003e Fix stack overflow in ANN401 on quoted annotations with escape sequences (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23\"\u003e#23\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/91fc7bd3f936974d7107ba8fd0668bc251a55c58\"\u003e\u003ccode\u003e91fc7bd\u003c/code\u003e\u003c/a\u003e [ty] Fix false-positive diagnostics for PEP-604 union annotations on attribut...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/04229cffb44dfe8c64a0879eb3cea472a08d1565\"\u003e\u003ccode\u003e04229cf\u003c/code\u003e\u003c/a\u003e [ty] Initial test suite for PEP-728 \u003ccode\u003eTypedDict\u003c/code\u003e features (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23832\"\u003e#23832\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/728b9d6fd300d492fc2572bcfade170141296f97\"\u003e\u003ccode\u003e728b9d6\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epep8-naming\u003c/code\u003e] Check naming conventions in \u003ccode\u003ematch\u003c/code\u003e pattern bindings (\u003ccode\u003eN806\u003c/code\u003e,...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/88d1eecd261679fc9d1d10f30d814230a7f28513\"\u003e\u003ccode\u003e88d1eec\u003c/code\u003e\u003c/a\u003e [ty] Ensure a \u003ccode\u003etype[]\u003c/code\u003e type \u003ccode\u003eT\u003c/code\u003e is always considered assignable to a union th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/37cdd61406ad4965847c9baa7c3f6ca633887d68\"\u003e\u003ccode\u003e37cdd61\u003c/code\u003e\u003c/a\u003e Fix lambda body formatting for multiline calls and subscripts (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23866\"\u003e#23866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a25a4df54aca67d23b4867ddad634fe0768fd6a2\"\u003e\u003ccode\u003ea25a4df\u003c/code\u003e\u003c/a\u003e [ty] Disambiguate duplicate-looking overloaded callables in union display (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/2\"\u003e#2\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.4...0.15.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 7.0.3 to 7.0.5\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst\"\u003ecachetools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev7.0.5 (2026-03-09)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMinor \u003ccode\u003e@cachedmethod\u003c/code\u003e performance improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.4 (2026-03-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix and properly document \u003ccode\u003e@cachedmethod.cache_key\u003c/code\u003e behavior.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMinor documentation improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/5dce86fc5c9c565c6e9c912e2be5d6abb9586a1d\"\u003e\u003ccode\u003e5dce86f\u003c/code\u003e\u003c/a\u003e Release v7.0.5.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/af5e68812b6fc5e432b5098711b5f4dcb5d20ccd\"\u003e\u003ccode\u003eaf5e688\u003c/code\u003e\u003c/a\u003e Minor \u003ca href=\"https://github.com/cachedmethod\"\u003e\u003ccode\u003e@​cachedmethod\u003c/code\u003e\u003c/a\u003e performance improvements.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/0ca75e6049b63faa75c05b9929c83e3507be84a0\"\u003e\u003ccode\u003e0ca75e6\u003c/code\u003e\u003c/a\u003e Relase v7.0.4.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/5b1fa392d07a74774f9eb6796205777c81110f1c\"\u003e\u003ccode\u003e5b1fa39\u003c/code\u003e\u003c/a\u003e Prepare v7.0.4.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/18e5930ced2cf107c273b81d949dbab8ce3f48e1\"\u003e\u003ccode\u003e18e5930\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/218\"\u003e#218\u003c/a\u003e: Fix and properly document \u003ca href=\"https://github.com/cachedmethod\"\u003e\u003ccode\u003e@​cachedmethod\u003c/code\u003e\u003c/a\u003e.cache_key handling.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/98ec79ff8be24ce1346d6a96602f11ccbda4f76f\"\u003e\u003ccode\u003e98ec79f\u003c/code\u003e\u003c/a\u003e Drop \u0026quot;class method\u0026quot; from \u003ca href=\"https://github.com/cachedmethod\"\u003e\u003ccode\u003e@​cachedmethod\u003c/code\u003e\u003c/a\u003e docstring.\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.0.3...v7.0.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.4 to 3.4.6\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.4.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003cbr /\u003e\nmypyc changed the usual binary output for the optimized wheel. Beware, especially if using PyInstaller or alike. See \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/714\"\u003ejawah/charset_normalizer#714\u003c/a\u003e\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/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.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/5478b84058a2a04e2d67a5dabbe0a273706707aa\"\u003e\u003ccode\u003e5478b84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/715\"\u003e#715\u003c/a\u003e from jawah/release-3.4.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5c0a09e2caf1b3977df691916e949e1de4b8a738\"\u003e\u003ccode\u003e5c0a09e\u003c/code\u003e\u003c/a\u003e :heavy_check_mark: add confidence for threading usage, mostly due to lru_cach...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/ef826b28d9f21e0059c93acc69a8bf364126c179\"\u003e\u003ccode\u003eef826b2\u003c/code\u003e\u003c/a\u003e :pencil: update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5564f1aebe56584150a988f565ff69ee316dcefe\"\u003e\u003ccode\u003e5564f1a\u003c/code\u003e\u003c/a\u003e :pencil: update docs accordingly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/0f2cf7d86e7c3ef4b77790a754b048bfada4fd09\"\u003e\u003ccode\u003e0f2cf7d\u003c/code\u003e\u003c/a\u003e :pencil: update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/54a189446becf4f2b42772f0dce89a5ef79fe8cc\"\u003e\u003ccode\u003e54a1894\u003c/code\u003e\u003c/a\u003e :bug: fix --normalize writing to wrong path with multiple files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/2177e28828bb7fcc2f1bed2a2d4463161a180812\"\u003e\u003ccode\u003e2177e28\u003c/code\u003e\u003c/a\u003e :pencil: update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b2497a54ba545dae84be01649d66fd52a7fcfc2d\"\u003e\u003ccode\u003eb2497a5\u003c/code\u003e\u003c/a\u003e :bug: edge case where noise difference between two candidates can be almost i...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/13a5d0b471cfb9b60b8cda84c78b7874c0267123\"\u003e\u003ccode\u003e13a5d0b\u003c/code\u003e\u003c/a\u003e :wrench: upgrade ci requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b9ffbd4e8314b0f733ddb34eef32d80490eb947c\"\u003e\u003ccode\u003eb9ffbd4\u003c/code\u003e\u003c/a\u003e :wrench: enable 3.14t nox mypyc session\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.4...3.4.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `crawlee` from 1.4.0 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/apify/crawlee-python/releases\"\u003ecrawlee's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.5.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/apify/crawlee-python/releases/tag/v1.5.0\"\u003e1.5.0\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003e🚀 Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse specialized Playwright docker images in templates (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1757\"\u003e#1757\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/747c0cf4a82296a2e3ea5cac5ef4c9578ea62a0c\"\u003e747c0cf\u003c/a\u003e) by \u003ca href=\"https://github.com/Pijukatel\"\u003e\u003ccode\u003e@​Pijukatel\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ediscover_valid_sitemaps\u003c/code\u003e utility (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1777\"\u003e#1777\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/872447b60bbdb3926068064a971492807b1bdfbb\"\u003e872447b\u003c/a\u003e) by \u003ca href=\"https://github.com/Mantisus\"\u003e\u003ccode\u003e@​Mantisus\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent list modification during iteration in BrowserPool (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1703\"\u003e#1703\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/70309d9bf568d268a26b3ba6392be2b6ff284c65\"\u003e70309d9\u003c/a\u003e) by \u003ca href=\"https://github.com/vdusek\"\u003e\u003ccode\u003e@​vdusek\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e max_requests_per_crawl\u003c/code\u003e excluding failed requests (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1766\"\u003e#1766\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/d6bb0b4a9dc5dd6668d076fbfa1b5e748deaee0d\"\u003ed6bb0b4\u003c/a\u003e) by \u003ca href=\"https://github.com/Pijukatel\"\u003e\u003ccode\u003e@​Pijukatel\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplaywright:\u003c/strong\u003e Dispose of \u003ccode\u003eAPIResponse\u003c/code\u003e body for \u003ccode\u003esend_request\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1771\"\u003e#1771\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/29d301bf9d7795f2fbaddb99235a7157b880f60c\"\u003e29d301b\u003c/a\u003e) by \u003ca href=\"https://github.com/kozlice\"\u003e\u003ccode\u003e@​kozlice\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReturn \u003ccode\u003eNone\u003c/code\u003e from \u003ccode\u003eadd_request\u003c/code\u003e when storage client fails to enqueue request (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1775\"\u003e#1775\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/944753a71956c30f3ce0896ffa24be7de5348933\"\u003e944753a\u003c/a\u003e) by \u003ca href=\"https://github.com/Mantisus\"\u003e\u003ccode\u003e@​Mantisus\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRe-use pre-existing browser context in \u003ccode\u003ePlaywrightBrowserController\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1778\"\u003e#1778\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/44875433df83d433aa69ada458b91df3ad569f5e\"\u003e4487543\u003c/a\u003e) by \u003ca href=\"https://github.com/Pijukatel\"\u003e\u003ccode\u003e@​Pijukatel\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/apify/crawlee-python/blob/master/CHANGELOG.md\"\u003ecrawlee's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/apify/crawlee-python/releases/tag/v1.5.0\"\u003e1.5.0\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003e🚀 Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse specialized Playwright docker images in templates (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1757\"\u003e#1757\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/747c0cf4a82296a2e3ea5cac5ef4c9578ea62a0c\"\u003e747c0cf\u003c/a\u003e) by \u003ca href=\"https://github.com/Pijukatel\"\u003e\u003ccode\u003e@​Pijukatel\u003c/code\u003e\u003c/a\u003e, closes \u003ca href=\"https://redirect.github.com/apify/crawlee-python/issues/1756\"\u003e#1756\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ediscover_valid_sitemaps\u003c/code\u003e utility (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1777\"\u003e#1777\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/872447b60bbdb3926068064a971492807b1bdfbb\"\u003e872447b\u003c/a\u003e) by \u003ca href=\"https://github.com/Mantisus\"\u003e\u003ccode\u003e@​Mantisus\u003c/code\u003e\u003c/a\u003e, closes \u003ca href=\"https://redirect.github.com/apify/crawlee-python/issues/1740\"\u003e#1740\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e🐛 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent list modification during iteration in BrowserPool (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1703\"\u003e#1703\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/70309d9bf568d268a26b3ba6392be2b6ff284c65\"\u003e70309d9\u003c/a\u003e) by \u003ca href=\"https://github.com/vdusek\"\u003e\u003ccode\u003e@​vdusek\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e max_requests_per_crawl\u003c/code\u003e excluding failed requests (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1766\"\u003e#1766\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/d6bb0b4a9dc5dd6668d076fbfa1b5e748deaee0d\"\u003ed6bb0b4\u003c/a\u003e) by \u003ca href=\"https://github.com/Pijukatel\"\u003e\u003ccode\u003e@​Pijukatel\u003c/code\u003e\u003c/a\u003e, closes \u003ca href=\"https://redirect.github.com/apify/crawlee-python/issues/1765\"\u003e#1765\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eplaywright:\u003c/strong\u003e Dispose of \u003ccode\u003eAPIResponse\u003c/code\u003e body for \u003ccode\u003esend_request\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1771\"\u003e#1771\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/crawlee-python/commit/29d301bf9d7795f2fbaddb99235a7157b880f60c\"\u003e29d301b\u003c/a\u003e) by \u003ca href=\"https://github.com/kozlice\"\u003e\u003ccode\u003e@​kozlice\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReturn \u003ccode\u003eNone\u003c/code\u003e from \u003ccode\u003eadd_request\u003c/code\u003e when storage client fails to enqueue request (\u003ca href=\"https://redirect.github.com/apify/crawlee-python/pull/1775\"\u003e#1775\u003c/a\u003e) (\u003ca href=\"https://github.com/apify/...\n\n_Description has been truncated_","html_url":"https://github.com/po4yka/bite-size-reader/pull/199","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/po4yka%2Fbite-size-reader/issues/199","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/199/packages"}}]}