From ccd8c65b25431080771fe29d01a491bf69f1851f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 05:15:55 +0000 Subject: [PATCH 1/3] chore(deps): bump the python-minor-and-patch group with 4 updates Bumps the python-minor-and-patch group with 4 updates: [fastapi](https://github.com/fastapi/fastapi), [langgraph](https://github.com/langchain-ai/langgraph), [anthropic](https://github.com/anthropics/anthropic-sdk-python) and [openai](https://github.com/openai/openai-python). Updates `fastapi` from 0.136.3 to 0.137.0 - [Release notes](https://github.com/fastapi/fastapi/releases) - [Commits](https://github.com/fastapi/fastapi/compare/0.136.3...0.137.0) Updates `langgraph` from 1.2.4 to 1.2.5 - [Release notes](https://github.com/langchain-ai/langgraph/releases) - [Commits](https://github.com/langchain-ai/langgraph/compare/1.2.4...1.2.5) Updates `anthropic` from 0.107.1 to 0.109.1 - [Release notes](https://github.com/anthropics/anthropic-sdk-python/releases) - [Changelog](https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/anthropics/anthropic-sdk-python/compare/v0.107.1...v0.109.1) Updates `openai` from 2.41.0 to 2.41.1 - [Release notes](https://github.com/openai/openai-python/releases) - [Changelog](https://github.com/openai/openai-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/openai/openai-python/compare/v2.41.0...v2.41.1) --- updated-dependencies: - dependency-name: fastapi dependency-version: 0.137.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: python-minor-and-patch - dependency-name: langgraph dependency-version: 1.2.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: python-minor-and-patch - dependency-name: anthropic dependency-version: 0.109.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: python-minor-and-patch - dependency-name: openai dependency-version: 2.41.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: python-minor-and-patch ... Signed-off-by: dependabot[bot] --- uv.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/uv.lock b/uv.lock index c40df64a..fc71b885 100644 --- a/uv.lock +++ b/uv.lock @@ -62,7 +62,7 @@ wheels = [ [[package]] name = "anthropic" -version = "0.107.1" +version = "0.109.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -74,9 +74,9 @@ dependencies = [ { name = "sniffio" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/f1/c6076a92e0bf6b0dfa126e213b3f9e8a510acd73567953210713aae6c256/anthropic-0.107.1.tar.gz", hash = "sha256:8e7169a6ab57fb806b778d9af018c867bad688144efec8969cdb4c5ccecd6670", size = 856312, upload-time = "2026-06-07T17:18:57.358Z" } +sdist = { url = "https://files.pythonhosted.org/packages/54/0b/ce24a4f275573f5e436ca954faca60c759d58ed152b8fa36a1e3b888e261/anthropic-0.109.1.tar.gz", hash = "sha256:83e06b3d9d40ff5898f588020e0cc4e42187de954549a3b5fbe6e2685a09c785", size = 927569, upload-time = "2026-06-09T23:55:24.884Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/86/0e/71432f0777a263701955a23ebcc6650485c2753be9afbce2a6a8d72526e3/anthropic-0.107.1-py3-none-any.whl", hash = "sha256:b74338d08000ba105dfc8adae29af3713ece845a4bffec9986a20697e087c7b3", size = 838729, upload-time = "2026-06-07T17:18:58.729Z" }, + { url = "https://files.pythonhosted.org/packages/91/0f/a6110d713370bc92f074a622f8a5ebdec7e92360149b1048dca258a07b2f/anthropic-0.109.1-py3-none-any.whl", hash = "sha256:ce7d94a7657f2aa29338cca448945eac621b4f62c1794cf461cb32847223e9b8", size = 923851, upload-time = "2026-06-09T23:55:23.348Z" }, ] [[package]] @@ -665,9 +665,9 @@ requires-dist = [ { name = "jinja2", marker = "extra == 'http'", specifier = ">=3.1.4" }, { name = "jsonpath-ng", marker = "extra == 'all'", specifier = ">=1.6.1" }, { name = "jsonpath-ng", marker = "extra == 'http'", specifier = ">=1.6.1" }, - { name = "openai", marker = "extra == 'all'", specifier = ">=1.55.0" }, - { name = "openai", marker = "extra == 'api-call'", specifier = ">=1.55.0" }, - { name = "openai", marker = "extra == 'openai'", specifier = ">=1.55.0" }, + { name = "openai", marker = "extra == 'all'", specifier = ">=2.41.1" }, + { name = "openai", marker = "extra == 'api-call'", specifier = ">=2.41.1" }, + { name = "openai", marker = "extra == 'openai'", specifier = ">=2.41.1" }, ] provides-extras = ["anthropic", "openai", "google", "api-call", "http", "all"] @@ -766,7 +766,7 @@ wheels = [ [[package]] name = "fastapi" -version = "0.136.3" +version = "0.137.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-doc" }, @@ -775,9 +775,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/81/2d/ff8d91d7b564d464629a0fd50a4489c97fcb836ac230bf3a7269232a9b1f/fastapi-0.136.3.tar.gz", hash = "sha256:e487fae93ad408e6f47641ee4dfe389864fd7bec92e547ea8498fc13f43e83ab", size = 396410, upload-time = "2026-05-23T18:53:15.192Z" } +sdist = { url = "https://files.pythonhosted.org/packages/da/fe/fb25c287ff7e0f79fc6acf2e8b812725dad28d2a1446c0410bab1422ac90/fastapi-0.137.0.tar.gz", hash = "sha256:d0565d551f65a803ecff245390840867186f456ef98971f750724eed16e1541c", size = 408023, upload-time = "2026-06-14T12:51:30.672Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/82/45359b62a067409bd929ae8a56b8ed13e5a8c8a61194b3c236920999ab83/fastapi-0.136.3-py3-none-any.whl", hash = "sha256:3d2a69bdf04b7e9f3afa292c3bc7a98816bbfafa10bc9b45f3f3700d2f761620", size = 117481, upload-time = "2026-05-23T18:53:16.924Z" }, + { url = "https://files.pythonhosted.org/packages/e7/f1/b38481428e50131e5345b535414d11d196f14990122fe69c9020c64e5683/fastapi-0.137.0-py3-none-any.whl", hash = "sha256:6dcbde8d464f92117c1accb9e42720f8e423fa9b86cb563b1f5862f785a06498", size = 121777, upload-time = "2026-06-14T12:51:29.067Z" }, ] [[package]] @@ -1090,7 +1090,7 @@ wheels = [ [[package]] name = "langchain-core" -version = "1.4.0" +version = "1.4.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonpatch" }, @@ -1103,9 +1103,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "uuid-utils" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/59/de/679a53472c25860837e32c0442c962fa86e95317a36460e2c9d5c91b17c2/langchain_core-1.4.0.tar.gz", hash = "sha256:1dc341eed802ed9c117c0df3923c991e5e9e226571e5725c194eeb5bd93d1a7f", size = 920260, upload-time = "2026-05-11T18:42:35.919Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/2b/fffaff399d20a56d40b9562fa19701e91abd72d8c9d9bc8c2673077b56b6/langchain_core-1.4.7.tar.gz", hash = "sha256:7a825d77de0a3f39adbd9d09612a75e85527e14a52c1601089bcc062972d9f2b", size = 952522, upload-time = "2026-06-12T19:23:57.588Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/1a/86c38c27b81913a1c6c12448cab55defb5a1097c7dc9a4cea83f55477a2d/langchain_core-1.4.0-py3-none-any.whl", hash = "sha256:23cbbdb46e38ddd1dd5247e6167e96013eae74bea4c5949c550809970a9e565c", size = 548120, upload-time = "2026-05-11T18:42:33.992Z" }, + { url = "https://files.pythonhosted.org/packages/de/3e/dcdffa60078ae7b3a00ebb4cbbf1a204a14c3609983c604886523a7d4418/langchain_core-1.4.7-py3-none-any.whl", hash = "sha256:bcadd51951140ecdcba98311dbd931ba5de02a5ba8a2288dad5069c1eea2a13d", size = 554941, upload-time = "2026-06-12T19:23:55.826Z" }, ] [[package]] @@ -1122,7 +1122,7 @@ wheels = [ [[package]] name = "langgraph" -version = "1.2.4" +version = "1.2.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain-core" }, @@ -1132,9 +1132,9 @@ dependencies = [ { name = "pydantic" }, { name = "xxhash" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1c/43/dac5a2621c1e57f8eb7f0703f6f6fe34a5caf62f8f0fb4d2bb395bb454ea/langgraph-1.2.4.tar.gz", hash = "sha256:5df076973a2d23efb13eceb279d1e5b46feebcbbeded0a86a2ef669abd9e4399", size = 720374, upload-time = "2026-06-02T17:07:37.347Z" } +sdist = { url = "https://files.pythonhosted.org/packages/77/9d/7c9ebd17b95569122e2d2e641f535cf086c870d66bb8e59be33cdba856b3/langgraph-1.2.5.tar.gz", hash = "sha256:09a3bdec6fdb3228623fc78b6f69a1400d383f66348d0b04d0efb692022cc6ef", size = 712532, upload-time = "2026-06-12T20:30:58.498Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/48/9e/31ca236104966d7bb14ea9e93cfd73350aea8c41008ddf057b65794ed10d/langgraph-1.2.4-py3-none-any.whl", hash = "sha256:ffe3e1e31dce28907640f82525858470f293506d2b272d07ea3b3ce97974b067", size = 245402, upload-time = "2026-06-02T17:07:35.977Z" }, + { url = "https://files.pythonhosted.org/packages/a2/03/187281cf61845c5a9c397ae6cd9cd73bb54b39435e5575a7b83c853e5b76/langgraph-1.2.5-py3-none-any.whl", hash = "sha256:9286bb5def82fc865959c14378fe473518dc097d586225f622f029637a2a4bb9", size = 246150, upload-time = "2026-06-12T20:30:57.018Z" }, ] [[package]] @@ -1463,7 +1463,7 @@ wheels = [ [[package]] name = "openai" -version = "2.41.0" +version = "2.41.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -1475,9 +1475,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3c/a6/5815fe2e2aca74b36c650d1bd43b69827cee568073d0d2d9b6fc5aaac80c/openai-2.41.0.tar.gz", hash = "sha256:db5c362acd6604b84f076abbefa66826ea4b46ecba2954ed866e6a149a1352c0", size = 783525, upload-time = "2026-06-03T22:39:40.719Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/36/4c926a91554483977608951360c18c2e911592785eb87a6437813f6123f7/openai-2.41.1.tar.gz", hash = "sha256:23d617a0432457ad844973bee8f540be9da90894f7c5686852d2d365da058f57", size = 783584, upload-time = "2026-06-10T16:10:37.667Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/be/51/d82bb424e8aa372190c5233253a2ceb399a778747d18b42cff487411e663/openai-2.41.0-py3-none-any.whl", hash = "sha256:20cc7952e8501c7e5773dd2ef7be437bae9cb549044902e1041a83a54516e375", size = 1353378, upload-time = "2026-06-03T22:39:38.964Z" }, + { url = "https://files.pythonhosted.org/packages/20/74/925d7b3892927e9804aaf58d374a45dc28e4420ff90e992272b77286343e/openai-2.41.1-py3-none-any.whl", hash = "sha256:a939565f350cb7443cb843b801b88c716ac8024b492fb94ca269d5f6b1bbefd6", size = 1353380, upload-time = "2026-06-10T16:10:35.756Z" }, ] [[package]] From 52674e9194311ba14a92136466457c93370b606a Mon Sep 17 00:00:00 2001 From: rafeekpro <423235+rafeekpro@users.noreply.github.com> Date: Wed, 17 Jun 2026 11:37:53 +0200 Subject: [PATCH 2/3] fix(tests): adapt OAuth routes assertion to fastapi 0.137 tree fastapi 0.137 (#15745) refactored router internals: ``router.routes`` is no longer a flat list of ``APIRoute`` objects and now contains ``_IncludedRouter`` wrappers that expose their effective leaves via ``effective_candidates()`` (each an ``_EffectiveRouteContext`` carrying the rendered ``path``). The OAuth-routes smoke test iterated ``app.routes`` and read ``.path`` on every entry, which broke with ``AttributeError: '_IncludedRouter' object has no attribute 'path'``. Replace the comprehension with a recursive walker that descends through ``effective_candidates()`` (the new fastapi 0.137 wrapper API) or ``.routes`` (legacy) and only collects entries that carry a ``.path``. Also reconciles ``uv.lock`` with develop's ``dap-database`` workspace addition so ``uv lock --check`` is green. Co-Authored-By: Claude Opus 4.7 --- tests/smoke/test_auth_oauth.py | 25 ++++++++++++++++++++++++- uv.lock | 6 +++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/tests/smoke/test_auth_oauth.py b/tests/smoke/test_auth_oauth.py index 7070cb61..503fe3ca 100644 --- a/tests/smoke/test_auth_oauth.py +++ b/tests/smoke/test_auth_oauth.py @@ -72,8 +72,31 @@ def test_oauth_routes_only_mounted_when_credentials_present( assert resp.status_code == 404 +def _collect_paths(routes) -> set[str]: + """Walk fastapi's route tree, descending into nested routers. + + Since fastapi 0.137 (#15745), ``router.routes`` is no longer a flat list of + ``APIRoute`` objects — it can contain ``_IncludedRouter`` wrappers whose + leaves are exposed via ``effective_candidates`` (each an + ``_EffectiveRouteContext`` carrying the effective ``path``). + """ + paths: set[str] = set() + for r in routes: + path = getattr(r, "path", None) + if path is not None: + paths.add(path) + effective = getattr(r, "effective_candidates", None) + if callable(effective): + paths.update(_collect_paths(effective())) + continue + nested = getattr(r, "routes", None) + if nested: + paths.update(_collect_paths(nested)) + return paths + + def test_oauth_routes_present_when_configured(oauth_client: TestClient) -> None: - paths = {r.path for r in oauth_client.app.routes} # type: ignore[attr-defined] + paths = _collect_paths(oauth_client.app.routes) # type: ignore[attr-defined] assert "/auth/github/authorize" in paths assert "/auth/github/callback" in paths assert "/auth/google/authorize" in paths diff --git a/uv.lock b/uv.lock index fc71b885..2f3bb974 100644 --- a/uv.lock +++ b/uv.lock @@ -665,9 +665,9 @@ requires-dist = [ { name = "jinja2", marker = "extra == 'http'", specifier = ">=3.1.4" }, { name = "jsonpath-ng", marker = "extra == 'all'", specifier = ">=1.6.1" }, { name = "jsonpath-ng", marker = "extra == 'http'", specifier = ">=1.6.1" }, - { name = "openai", marker = "extra == 'all'", specifier = ">=2.41.1" }, - { name = "openai", marker = "extra == 'api-call'", specifier = ">=2.41.1" }, - { name = "openai", marker = "extra == 'openai'", specifier = ">=2.41.1" }, + { name = "openai", marker = "extra == 'all'", specifier = ">=1.55.0" }, + { name = "openai", marker = "extra == 'api-call'", specifier = ">=1.55.0" }, + { name = "openai", marker = "extra == 'openai'", specifier = ">=1.55.0" }, ] provides-extras = ["anthropic", "openai", "google", "api-call", "http", "all"] From 99fe876574cd1612a3b93d59cd4d24c416c5a68f Mon Sep 17 00:00:00 2001 From: rafeekpro <423235+rafeekpro@users.noreply.github.com> Date: Wed, 17 Jun 2026 11:54:25 +0200 Subject: [PATCH 3/3] chore(types): add mypy annotation for _collect_paths param MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mypy strict mode flagged the new helper as missing a parameter annotation. Type the iterable of route-like objects as ``Iterable[Any]`` — they can be ``APIRoute``, ``Mount``, ``_IncludedRouter``, or ``_EffectiveRouteContext`` depending on fastapi version and tree depth. Co-Authored-By: Claude Opus 4.7 --- tests/smoke/test_auth_oauth.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/smoke/test_auth_oauth.py b/tests/smoke/test_auth_oauth.py index 503fe3ca..5a1bff86 100644 --- a/tests/smoke/test_auth_oauth.py +++ b/tests/smoke/test_auth_oauth.py @@ -19,8 +19,9 @@ from __future__ import annotations import tempfile -from collections.abc import Iterator +from collections.abc import Iterable, Iterator from pathlib import Path +from typing import Any import pytest from dap_engine.app import EngineConfig, create_app @@ -72,7 +73,7 @@ def test_oauth_routes_only_mounted_when_credentials_present( assert resp.status_code == 404 -def _collect_paths(routes) -> set[str]: +def _collect_paths(routes: Iterable[Any]) -> set[str]: """Walk fastapi's route tree, descending into nested routers. Since fastapi 0.137 (#15745), ``router.routes`` is no longer a flat list of