chore: 1.0-dev into proto refactor#696
chore: 1.0-dev into proto refactor#696ishymko merged 52 commits intoishymko/1.0-a2a_proto_refactorfrom
Conversation
Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Luca Muscariello <muscariello@ieee.org> Co-authored-by: Yaroslav <yarolegovich@gmail.com> Co-authored-by: Agent2Agent (A2A) Bot <a2a-bot@google.com> Co-authored-by: agil.yolchuyev <agilyolchuyev@outlook.com> Co-authored-by: yolagil <agil@peotic.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com> Co-authored-by: Luca Muscariello <muscariello@ieee.org> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…the specification (#511) Commit: a2aproject/A2A@0a9f629 This PR introduces support for the new `tasks/list` method, including: - Automatically generated type definitions from the specification. - Complete client-side and server-side implementations. Fixes #515 🦕 --------- Co-authored-by: lkawka <lkawka@google.com> Co-authored-by: lkawka <luk.kawka@gmail.com> Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com>
Co-authored-by: Iva Sokolaj <102302011+sokoliva@users.noreply.github.com> Co-authored-by: Agent2Agent (A2A) Bot <a2a-bot@google.com> Co-authored-by: Tadaki Asechi <127199356+TadakiAsechi@users.noreply.github.com> Co-authored-by: tadaki <tadaki.asechi@gmail.com> Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com> Co-authored-by: TadakiAsechi <tadaki.asechi@icould.com> Co-authored-by: TadakiAsechi <tadaki.asechi@iclould.com>
# Description Refine error management for the streaming operation. Previously, errors were converted into stream parts, resulting in the loss of status info. The updated logic now first verifies if the request was successful; if it failed, a client error is returned, preserving the relevant status information. - [x] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md). - [x] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - Important Prefixes for [release-please](https://github.com/googleapis/release-please): - `fix:` which represents bug fixes, and correlates to a [SemVer](https://semver.org/) patch. - `feat:` represents a new feature, and correlates to a SemVer minor. - `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking change (indicated by the `!`) and will result in a SemVer major. - [x] Ensure the tests and linter pass (Run `bash scripts/format.sh` from the repository root to format) - [x] Appropriate docs were updated (if necessary) Fixes #502 🦕
🤖 I have created a release *beep* *boop* --- ## [0.3.20](v0.3.19...v0.3.20) (2025-12-03) ### Bug Fixes * Improve streaming errors handling ([#576](#576)) ([7ea7475](7ea7475)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
# Description Just fixing various typos discovered while reading code of the repo: see commit diffs for details Cheers Didier - [X] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md). - [X] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - [X] Ensure the tests and linter pass (Run `bash scripts/format.sh` from the repository root to format) - [X] Appropriate docs were updated (if necessary) Fixes #<issue_number_goes_here> 🦕 N/A --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This PR introduces digital signatures for Agent Cards to ensure authenticity and integrity, adhering to the A2A specification for [Agent Card Signing (Section 8.4).](https://a2a-protocol.org/latest/specification/#84-agent-card-signing) ## Changes: - Implement `Canonicalization` Logic (`src/a2a/utils/signing.py`) - Add `Signing` and `Verification` Utilities (`src/a2a/utils/signing.py`): - `create_agent_card_signer` which generates an `agent_card_signer` for signing `AgentCards` - `create_signature_verifier` which generates a `signature_verifier` for verification of `AgentCard` signatures - Enable signature verification support for `json-rpc`, `rest` and `gRPC` transports - Add Protobuf Conversion for Signatures (`src/a2a/utils/proto_utils.py`) ensuring `AgentCardSignature` can be serialized and deserialized for gRPC transport - Add related tests: - integration tests for fetching signed cards from the Server - unit tests for signing util - unit tests for protobuf conversions - [x] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md). - [x] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - Important Prefixes for [release-please](https://github.com/googleapis/release-please): - `fix:` which represents bug fixes, and correlates to a [SemVer](https://semver.org/) patch. - `feat:` represents a new feature, and correlates to a SemVer minor. - `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking change (indicated by the `!`) and will result in a SemVer major. - [x] Ensure the tests and linter pass (Run `bash scripts/format.sh` from the repository root to format) - [x] Appropriate docs were updated (if necessary) Release-As: 0.3.21
# Description Read further and discovered this additional (and final) set of typos
🤖 I have created a release *beep* *boop* --- ## [0.3.21](v0.3.20...v0.3.21) (2025-12-12) ### Documentation * Fixing typos ([#586](#586)) ([5fea21f](5fea21f)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
# Description This change allows passing custom `task_id_generator` and `context_id_generator` functions to the `SimpleRequestContextBuilder`. This provides flexibility in how task and context IDs are generated, defaulting to the previous behavior if no generators are provided. Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [x] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md). - [x] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - Important Prefixes for [release-please](https://github.com/googleapis/release-please): - `fix:` which represents bug fixes, and correlates to a [SemVer](https://semver.org/) patch. - `feat:` represents a new feature, and correlates to a SemVer minor. - `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking change (indicated by the `!`) and will result in a SemVer major. - [x] Ensure the tests and linter pass (Run `bash scripts/format.sh` from the repository root to format) - [x] Appropriate docs were updated (if necessary) Fixes #<issue_number_goes_here> 🦕
# Description Adding 2 more tests to user.py to improve build code coverage - [X] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md). - [X] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - [X] Ensure the tests and linter pass (Run `bash scripts/format.sh` from the repository root to format) - [N/A] Appropriate docs were updated (if necessary) Fixes #<issue_number_goes_here> 🦕 N/A --------- Co-authored-by: Lukasz Kawka <luk.kawka@gmail.com>
# Description Adding 21 tests for client/card_resolver.py They all pass: ``` ========================= test session starts ============================== collecting ... collected 21 items tests/client/test_card_resolver.py::TestA2ACardResolverInit::test_init_with_defaults PASSED [ 4%] tests/client/test_card_resolver.py::TestA2ACardResolverInit::test_init_with_custom_path PASSED [ 9%] tests/client/test_card_resolver.py::TestA2ACardResolverInit::test_init_strips_leading_slash_from_agent_card_path PASSED [ 14%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_success_default_path PASSED [ 19%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_success_custom_path PASSED [ 23%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_strips_leading_slash_from_relative_path PASSED [ 28%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_with_http_kwargs PASSED [ 33%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_root_path PASSED [ 38%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_http_status_error PASSED [ 42%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_json_decode_error PASSED [ 47%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_request_error PASSED [ 52%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_validation_error PASSED [ 57%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_logs_success PASSED [ 61%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_none_relative_path PASSED [ 66%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_empty_string_relative_path PASSED [ 71%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_different_status_codes[400] PASSED [ 76%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_different_status_codes[401] PASSED [ 80%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_different_status_codes[403] PASSED [ 85%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_different_status_codes[500] PASSED [ 90%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_different_status_codes[502] PASSED [ 95%] tests/client/test_card_resolver.py::TestGetAgentCard::test_get_agent_card_returns_agent_card_instance PASSED [100%] ======================== 21 passed, 2 warnings in 0.11s ======================== ``` - [X] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md). - [X] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - [X] Ensure the tests and linter pass (Run `bash scripts/format.sh` from the repository root to format) - [N/A ] Appropriate docs were updated (if necessary) Fixes #<issue_number_goes_here> 🦕 N/A --------- Co-authored-by: Lukasz Kawka <luk.kawka@gmail.com>
…r` (#593) # Description Previously, the `JSON-RPC` and `REST` protocols verified agent card signatures after calling `A2ACardResolver.get_agent_card`. This change moves the signature verification logic inside the `A2ACardResolver.get_agent_card` method and adds a unit test to test_card_resolver.py Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [x] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md). - [x] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - Important Prefixes for [release-please](https://github.com/googleapis/release-please): - `fix:` which represents bug fixes, and correlates to a [SemVer](https://semver.org/) patch. - `feat:` represents a new feature, and correlates to a SemVer minor. - `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking change (indicated by the `!`) and will result in a SemVer major. - [x] Ensure the tests and linter pass (Run `bash scripts/format.sh` from the repository root to format) - [x] Appropriate docs were updated (if necessary)
🤖 I have created a release *beep* *boop* --- ## [0.3.22](v0.3.21...v0.3.22) (2025-12-16) ### Features * Add custom ID generators to `SimpleRequestContextBuilder` ([#594](#594)) ([04bcafc](04bcafc)) ### Code Refactoring * Move agent card signature verification into `A2ACardResolver` ([6fa6a6c](6fa6a6c)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
# Description Adding 13 tests for server/tasks/id_generator.py They all pass: ``` ============================= test session starts ============================== collecting ... collected 13 items tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::test_context_creation_with_all_fields PASSED [ 7%] tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::test_context_creation_with_defaults PASSED [ 15%] tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::test_context_creation_with_partial_fields[kwargs0-task_123-None] PASSED [ 23%] tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::test_context_creation_with_partial_fields[kwargs1-None-context_456] PASSED [ 30%] tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::test_context_mutability PASSED [ 38%] tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::test_context_validation PASSED [ 46%] tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::TestIDGenerator::test_cannot_instantiate_abstract_class PASSED [ 53%] tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::TestIDGenerator::test_subclass_must_implement_generate PASSED [ 61%] tests/server/tasks/test_id_generator.py::TestIDGeneratorContext::TestIDGenerator::test_valid_subclass_implementation PASSED [ 69%] tests/server/tasks/test_id_generator.py::TestUUIDGenerator::test_generate_returns_string PASSED [ 76%] tests/server/tasks/test_id_generator.py::TestUUIDGenerator::test_generate_produces_unique_ids PASSED [ 84%] tests/server/tasks/test_id_generator.py::TestUUIDGenerator::test_generate_works_with_various_contexts[none_context] PASSED [ 92%] tests/server/tasks/test_id_generator.py::TestUUIDGenerator::test_generate_works_with_various_contexts[empty_context] PASSED [100%] ============================== 13 passed in 0.04s ============================== ``` - [X] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md). - [X] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - [X] Ensure the tests and linter pass (Run `bash scripts/format.sh` from the repository root to format) - [N/A] Appropriate docs were updated (if necessary) Fixes #<issue_number_goes_here> 🦕 N/A --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Lukasz Kawka <luk.kawka@gmail.com>
…updates (#603) Bumps the github-actions group with 4 updates in the / directory: [actions/checkout](https://github.com/actions/checkout), [actions/upload-artifact](https://github.com/actions/upload-artifact), [actions/download-artifact](https://github.com/actions/download-artifact) and [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request). Updates `actions/checkout` from 5 to 6 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/checkout/releases">actions/checkout's releases</a>.</em></p> <blockquote> <h2>v6.0.0</h2> <h2>What's Changed</h2> <ul> <li>Update README to include Node.js 24 support details and requirements by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li> <li>Persist creds to a separate file by <a href="https://github.com/ericsciple"><code>@ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li> <li>v6-beta by <a href="https://github.com/ericsciple"><code>@ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2298">actions/checkout#2298</a></li> <li>update readme/changelog for v6 by <a href="https://github.com/ericsciple"><code>@ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2311">actions/checkout#2311</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/checkout/compare/v5.0.0...v6.0.0">https://github.com/actions/checkout/compare/v5.0.0...v6.0.0</a></p> <h2>v6-beta</h2> <h2>What's Changed</h2> <p>Updated persist-credentials to store the credentials under <code>$RUNNER_TEMP</code> instead of directly in the local git config.</p> <p>This requires a minimum Actions Runner version of <a href="https://github.com/actions/runner/releases/tag/v2.329.0">v2.329.0</a> to access the persisted credentials for <a href="https://docs.github.com/en/actions/tutorials/use-containerized-services/create-a-docker-container-action">Docker container action</a> scenarios.</p> <h2>v5.0.1</h2> <h2>What's Changed</h2> <ul> <li>Port v6 cleanup to v5 by <a href="https://github.com/ericsciple"><code>@ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/checkout/compare/v5...v5.0.1">https://github.com/actions/checkout/compare/v5...v5.0.1</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's changelog</a>.</em></p> <blockquote> <h1>Changelog</h1> <h2>v6.0.0</h2> <ul> <li>Persist creds to a separate file by <a href="https://github.com/ericsciple"><code>@ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li> <li>Update README to include Node.js 24 support details and requirements by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li> </ul> <h2>v5.0.1</h2> <ul> <li>Port v6 cleanup to v5 by <a href="https://github.com/ericsciple"><code>@ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li> </ul> <h2>v5.0.0</h2> <ul> <li>Update actions checkout to use node 24 by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li> </ul> <h2>v4.3.1</h2> <ul> <li>Port v6 cleanup to v4 by <a href="https://github.com/ericsciple"><code>@ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li> </ul> <h2>v4.3.0</h2> <ul> <li>docs: update README.md by <a href="https://github.com/motss"><code>@motss</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li> <li>Add internal repos for checking out multiple repositories by <a href="https://github.com/mouismail"><code>@mouismail</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li> <li>Documentation update - add recommended permissions to Readme by <a href="https://github.com/benwells"><code>@benwells</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li> <li>Adjust positioning of user email note and permissions heading by <a href="https://github.com/joshmgross"><code>@joshmgross</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li> <li>Update README.md by <a href="https://github.com/nebuk89"><code>@nebuk89</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li> <li>Update CODEOWNERS for actions by <a href="https://github.com/TingluoHuang"><code>@TingluoHuang</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li> <li>Update package dependencies by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li> </ul> <h2>v4.2.2</h2> <ul> <li><code>url-helper.ts</code> now leverages well-known environment variables by <a href="https://github.com/jww3"><code>@jww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li> <li>Expand unit test coverage for <code>isGhes</code> by <a href="https://github.com/jww3"><code>@jww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li> </ul> <h2>v4.2.1</h2> <ul> <li>Check out other refs/* by commit if provided, fall back to ref by <a href="https://github.com/orhantoy"><code>@orhantoy</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li> </ul> <h2>v4.2.0</h2> <ul> <li>Add Ref and Commit outputs by <a href="https://github.com/lucacome"><code>@lucacome</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1180">actions/checkout#1180</a></li> <li>Dependency updates by <a href="https://github.com/dependabot"><code>@dependabot</code></a>- <a href="https://redirect.github.com/actions/checkout/pull/1777">actions/checkout#1777</a>, <a href="https://redirect.github.com/actions/checkout/pull/1872">actions/checkout#1872</a></li> </ul> <h2>v4.1.7</h2> <ul> <li>Bump the minor-npm-dependencies group across 1 directory with 4 updates by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1739">actions/checkout#1739</a></li> <li>Bump actions/checkout from 3 to 4 by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1697">actions/checkout#1697</a></li> <li>Check out other refs/* by commit by <a href="https://github.com/orhantoy"><code>@orhantoy</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1774">actions/checkout#1774</a></li> <li>Pin actions/checkout's own workflows to a known, good, stable version. by <a href="https://github.com/jww3"><code>@jww3</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1776">actions/checkout#1776</a></li> </ul> <h2>v4.1.6</h2> <ul> <li>Check platform to set archive extension appropriately by <a href="https://github.com/cory-miller"><code>@cory-miller</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1732">actions/checkout#1732</a></li> </ul> <h2>v4.1.5</h2> <ul> <li>Update NPM dependencies by <a href="https://github.com/cory-miller"><code>@cory-miller</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1703">actions/checkout#1703</a></li> <li>Bump github/codeql-action from 2 to 3 by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1694">actions/checkout#1694</a></li> <li>Bump actions/setup-node from 1 to 4 by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1696">actions/checkout#1696</a></li> <li>Bump actions/upload-artifact from 2 to 4 by <a href="https://github.com/dependabot"><code>@dependabot</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/1695">actions/checkout#1695</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/actions/checkout/commit/8e8c483db84b4bee98b60c0593521ed34d9990e8"><code>8e8c483</code></a> Clarify v6 README (<a href="https://redirect.github.com/actions/checkout/issues/2328">#2328</a>)</li> <li><a href="https://github.com/actions/checkout/commit/033fa0dc0b82693d8986f1016a0ec2c5e7d9cbb1"><code>033fa0d</code></a> Add worktree support for persist-credentials includeIf (<a href="https://redirect.github.com/actions/checkout/issues/2327">#2327</a>)</li> <li><a href="https://github.com/actions/checkout/commit/c2d88d3ecc89a9ef08eebf45d9637801dcee7eb5"><code>c2d88d3</code></a> Update all references from v5 and v4 to v6 (<a href="https://redirect.github.com/actions/checkout/issues/2314">#2314</a>)</li> <li><a href="https://github.com/actions/checkout/commit/1af3b93b6815bc44a9784bd300feb67ff0d1eeb3"><code>1af3b93</code></a> update readme/changelog for v6 (<a href="https://redirect.github.com/actions/checkout/issues/2311">#2311</a>)</li> <li><a href="https://github.com/actions/checkout/commit/71cf2267d89c5cb81562390fa70a37fa40b1305e"><code>71cf226</code></a> v6-beta (<a href="https://redirect.github.com/actions/checkout/issues/2298">#2298</a>)</li> <li><a href="https://github.com/actions/checkout/commit/069c6959146423d11cd0184e6accf28f9d45f06e"><code>069c695</code></a> Persist creds to a separate file (<a href="https://redirect.github.com/actions/checkout/issues/2286">#2286</a>)</li> <li><a href="https://github.com/actions/checkout/commit/ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493"><code>ff7abcd</code></a> Update README to include Node.js 24 support details and requirements (<a href="https://redirect.github.com/actions/checkout/issues/2248">#2248</a>)</li> <li>See full diff in <a href="https://github.com/actions/checkout/compare/v5...v6">compare view</a></li> </ul> </details> <br /> Updates `actions/upload-artifact` from 5 to 6 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/upload-artifact/releases">actions/upload-artifact's releases</a>.</em></p> <blockquote> <h2>v6.0.0</h2> <h2>v6 - What's new</h2> <blockquote> <p>[!IMPORTANT] actions/upload-artifact@v6 now runs on Node.js 24 (<code>runs.using: node24</code>) and requires a minimum Actions Runner version of 2.327.1. If you are using self-hosted runners, ensure they are updated before upgrading.</p> </blockquote> <h3>Node.js 24</h3> <p>This release updates the runtime to Node.js 24. v5 had preliminary support for Node.js 24, however this action was by default still running on Node.js 20. Now this action by default will run on Node.js 24.</p> <h2>What's Changed</h2> <ul> <li>Upload Artifact Node 24 support by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/upload-artifact/pull/719">actions/upload-artifact#719</a></li> <li>fix: update <code>@actions/artifact</code> for Node.js 24 punycode deprecation by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/upload-artifact/pull/744">actions/upload-artifact#744</a></li> <li>prepare release v6.0.0 for Node.js 24 support by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/upload-artifact/pull/745">actions/upload-artifact#745</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/upload-artifact/compare/v5.0.0...v6.0.0">https://github.com/actions/upload-artifact/compare/v5.0.0...v6.0.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/actions/upload-artifact/commit/b7c566a772e6b6bfb58ed0dc250532a479d7789f"><code>b7c566a</code></a> Merge pull request <a href="https://redirect.github.com/actions/upload-artifact/issues/745">#745</a> from actions/upload-artifact-v6-release</li> <li><a href="https://github.com/actions/upload-artifact/commit/e516bc8500aaf3d07d591fcd4ae6ab5f9c391d5b"><code>e516bc8</code></a> docs: correct description of Node.js 24 support in README</li> <li><a href="https://github.com/actions/upload-artifact/commit/ddc45ed9bca9b38dbd643978d88e3981cdc91415"><code>ddc45ed</code></a> docs: update README to correct action name for Node.js 24 support</li> <li><a href="https://github.com/actions/upload-artifact/commit/615b319bd27bb32c3d64dca6b6ed6974d5fbe653"><code>615b319</code></a> chore: release v6.0.0 for Node.js 24 support</li> <li><a href="https://github.com/actions/upload-artifact/commit/017748b48f8610ca8e6af1222f4a618e84a9c703"><code>017748b</code></a> Merge pull request <a href="https://redirect.github.com/actions/upload-artifact/issues/744">#744</a> from actions/fix-storage-blob</li> <li><a href="https://github.com/actions/upload-artifact/commit/38d4c7997f5510fcc41fc4aae2a6b97becdbe7fc"><code>38d4c79</code></a> chore: rebuild dist</li> <li><a href="https://github.com/actions/upload-artifact/commit/7d27270e0cfd253e666c44abac0711308d2d042f"><code>7d27270</code></a> chore: add missing license cache files for <code>@actions/core</code>, <code>@actions/io</code>, and mi...</li> <li><a href="https://github.com/actions/upload-artifact/commit/5f643d3c9475505ccaf26d686ffbfb71a8387261"><code>5f643d3</code></a> chore: update license files for <code>@actions/artifact</code><a href="https://github.com/5"><code>@5</code></a>.0.1 dependencies</li> <li><a href="https://github.com/actions/upload-artifact/commit/1df1684032c88614064493e1a0478fcb3583e1d0"><code>1df1684</code></a> chore: update package-lock.json with <code>@actions/artifact</code><a href="https://github.com/5"><code>@5</code></a>.0.1</li> <li><a href="https://github.com/actions/upload-artifact/commit/b5b1a918401ee270935b6b1d857ae66c85f3be6f"><code>b5b1a91</code></a> fix: update <code>@actions/artifact</code> to ^5.0.0 for Node.js 24 punycode fix</li> <li>Additional commits viewable in <a href="https://github.com/actions/upload-artifact/compare/v5...v6">compare view</a></li> </ul> </details> <br /> Updates `actions/download-artifact` from 6 to 7 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/download-artifact/releases">actions/download-artifact's releases</a>.</em></p> <blockquote> <h2>v7.0.0</h2> <h2>v7 - What's new</h2> <blockquote> <p>[!IMPORTANT] actions/download-artifact@v7 now runs on Node.js 24 (<code>runs.using: node24</code>) and requires a minimum Actions Runner version of 2.327.1. If you are using self-hosted runners, ensure they are updated before upgrading.</p> </blockquote> <h3>Node.js 24</h3> <p>This release updates the runtime to Node.js 24. v6 had preliminary support for Node 24, however this action was by default still running on Node.js 20. Now this action by default will run on Node.js 24.</p> <h2>What's Changed</h2> <ul> <li>Update GHES guidance to include reference to Node 20 version by <a href="https://github.com/patrikpolyak"><code>@patrikpolyak</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/440">actions/download-artifact#440</a></li> <li>Download Artifact Node24 support by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/415">actions/download-artifact#415</a></li> <li>fix: update <code>@actions/artifact</code> to fix Node.js 24 punycode deprecation by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/451">actions/download-artifact#451</a></li> <li>prepare release v7.0.0 for Node.js 24 support by <a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/452">actions/download-artifact#452</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/patrikpolyak"><code>@patrikpolyak</code></a> made their first contribution in <a href="https://redirect.github.com/actions/download-artifact/pull/440">actions/download-artifact#440</a></li> <li><a href="https://github.com/salmanmkc"><code>@salmanmkc</code></a> made their first contribution in <a href="https://redirect.github.com/actions/download-artifact/pull/415">actions/download-artifact#415</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/download-artifact/compare/v6.0.0...v7.0.0">https://github.com/actions/download-artifact/compare/v6.0.0...v7.0.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/actions/download-artifact/commit/37930b1c2abaa49bbe596cd826c3c89aef350131"><code>37930b1</code></a> Merge pull request <a href="https://redirect.github.com/actions/download-artifact/issues/452">#452</a> from actions/download-artifact-v7-release</li> <li><a href="https://github.com/actions/download-artifact/commit/72582b9e0acd370909e83fa4a1fd0fca3ad452d8"><code>72582b9</code></a> doc: update readme</li> <li><a href="https://github.com/actions/download-artifact/commit/0d2ec9d4cbcefe257d822f108de2a1f15f8da9f6"><code>0d2ec9d</code></a> chore: release v7.0.0 for Node.js 24 support</li> <li><a href="https://github.com/actions/download-artifact/commit/fd7ae8fda6dc16277a9ffbc91cdb0eedf156e912"><code>fd7ae8f</code></a> Merge pull request <a href="https://redirect.github.com/actions/download-artifact/issues/451">#451</a> from actions/fix-storage-blob</li> <li><a href="https://github.com/actions/download-artifact/commit/d484700543354b15886d6a52910cf61b7f1d2b27"><code>d484700</code></a> chore: restore minimatch.dep.yml license file</li> <li><a href="https://github.com/actions/download-artifact/commit/03a808050efe42bb6ad85281890afd4e4546672c"><code>03a8080</code></a> chore: remove obsolete dependency license files</li> <li><a href="https://github.com/actions/download-artifact/commit/56fe6d904b0968950f8b68ea17774c54973ed5e2"><code>56fe6d9</code></a> chore: update <code>@actions/artifact</code> license file to 5.0.1</li> <li><a href="https://github.com/actions/download-artifact/commit/8e3ebc4ab4d2e095e5eb44ba1a4a53b6b03976ad"><code>8e3ebc4</code></a> chore: update package-lock.json with <code>@actions/artifact</code><a href="https://github.com/5"><code>@5</code></a>.0.1</li> <li><a href="https://github.com/actions/download-artifact/commit/1e3c4b4d4906c98ab57453c24efefdf16c078044"><code>1e3c4b4</code></a> fix: update <code>@actions/artifact</code> to ^5.0.0 for Node.js 24 punycode fix</li> <li><a href="https://github.com/actions/download-artifact/commit/458627d354794c71bc386c8d5839d20b5885fe2a"><code>458627d</code></a> chore: use local <code>@actions/artifact</code> package for Node.js 24 testing</li> <li>Additional commits viewable in <a href="https://github.com/actions/download-artifact/compare/v6...v7">compare view</a></li> </ul> </details> <br /> Updates `peter-evans/create-pull-request` from 7 to 8 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/peter-evans/create-pull-request/releases">peter-evans/create-pull-request's releases</a>.</em></p> <blockquote> <h2>Create Pull Request v8.0.0</h2> <h2>What's new in v8</h2> <ul> <li>Requires <a href="https://github.com/actions/runner/releases/tag/v2.327.1">Actions Runner v2.327.1</a> or later if you are using a self-hosted runner for Node 24 support.</li> </ul> <h2>What's Changed</h2> <ul> <li>chore: Update checkout action version to v6 by <a href="https://github.com/yonas"><code>@yonas</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4258">peter-evans/create-pull-request#4258</a></li> <li>Update actions/checkout references to <a href="https://github.com/v6"><code>@v6</code></a> in docs by <a href="https://github.com/Copilot"><code>@Copilot</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4259">peter-evans/create-pull-request#4259</a></li> <li>feat: v8 by <a href="https://github.com/peter-evans"><code>@peter-evans</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4260">peter-evans/create-pull-request#4260</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/yonas"><code>@yonas</code></a> made their first contribution in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4258">peter-evans/create-pull-request#4258</a></li> <li><a href="https://github.com/Copilot"><code>@Copilot</code></a> made their first contribution in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4259">peter-evans/create-pull-request#4259</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/peter-evans/create-pull-request/compare/v7.0.11...v8.0.0">https://github.com/peter-evans/create-pull-request/compare/v7.0.11...v8.0.0</a></p> <h2>Create Pull Request v7.0.11</h2> <h2>What's Changed</h2> <ul> <li>fix: restrict remote prune to self-hosted runners by <a href="https://github.com/peter-evans"><code>@peter-evans</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4250">peter-evans/create-pull-request#4250</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11">https://github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11</a></p> <h2>Create Pull Request v7.0.10</h2> <p>⚙️ Fixes an issue where updating a pull request failed when targeting a forked repository with the same owner as its parent.</p> <h2>What's Changed</h2> <ul> <li>build(deps): bump the github-actions group with 2 updates by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4235">peter-evans/create-pull-request#4235</a></li> <li>build(deps-dev): bump prettier from 3.6.2 to 3.7.3 in the npm group by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4240">peter-evans/create-pull-request#4240</a></li> <li>fix: provider list pulls fallback for multi fork same owner by <a href="https://github.com/peter-evans"><code>@peter-evans</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4245">peter-evans/create-pull-request#4245</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/obnyis"><code>@obnyis</code></a> made their first contribution in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4064">peter-evans/create-pull-request#4064</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10">https://github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10</a></p> <h2>Create Pull Request v7.0.9</h2> <p>⚙️ Fixes an <a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4228">incompatibility</a> with the recently released <code>actions/checkout@v6</code>.</p> <h2>What's Changed</h2> <ul> <li>~70 dependency updates by <a href="https://github.com/dependabot"><code>@dependabot</code></a></li> <li>docs: fix workaround description about <code>ready_for_review</code> by <a href="https://github.com/ybiquitous"><code>@ybiquitous</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/3939">peter-evans/create-pull-request#3939</a></li> <li>Docs: <code>add-paths</code> default behavior by <a href="https://github.com/joeflack4"><code>@joeflack4</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/3928">peter-evans/create-pull-request#3928</a></li> <li>docs: update to create-github-app-token v2 by <a href="https://github.com/Goooler"><code>@Goooler</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4063">peter-evans/create-pull-request#4063</a></li> <li>Fix compatibility with actions/checkout@v6 by <a href="https://github.com/ericsciple"><code>@ericsciple</code></a> in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4230">peter-evans/create-pull-request#4230</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/joeflack4"><code>@joeflack4</code></a> made their first contribution in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/3928">peter-evans/create-pull-request#3928</a></li> <li><a href="https://github.com/Goooler"><code>@Goooler</code></a> made their first contribution in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4063">peter-evans/create-pull-request#4063</a></li> <li><a href="https://github.com/ericsciple"><code>@ericsciple</code></a> made their first contribution in <a href="https://redirect.github.com/peter-evans/create-pull-request/pull/4230">peter-evans/create-pull-request#4230</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/peter-evans/create-pull-request/commit/98357b18bf14b5342f975ff684046ec3b2a07725"><code>98357b1</code></a> feat: v8 (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4260">#4260</a>)</li> <li><a href="https://github.com/peter-evans/create-pull-request/commit/41c0e4b7899a4a0922bf899d64c5f25738cfe356"><code>41c0e4b</code></a> Update actions/checkout references to <a href="https://github.com/v6"><code>@v6</code></a> in docs (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4259">#4259</a>)</li> <li><a href="https://github.com/peter-evans/create-pull-request/commit/994332de4c8124517167807167073cf397678768"><code>994332d</code></a> chore: Update checkout action version to v6 (<a href="https://redirect.github.com/peter-evans/create-pull-request/issues/4258">#4258</a>)</li> <li>See full diff in <a href="https://github.com/peter-evans/create-pull-request/compare/v7...v8">compare view</a></li> </ul> </details> <br /> Dependabot 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`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> 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) - `@dependabot ignore <dependency name> 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) - `@dependabot ignore <dependency name>` 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) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Lukasz Kawka <luk.kawka@gmail.com>
# Description Currently it creates a lot of noise from broken PRs: https://github.com/a2aproject/a2a-python/pulls/a2a-bot. While we're migrating to 1.0 spec we're not benefiting from this automation. `workflow_dispatch` (manual run) is still available.
# Description Doing `uv sync` now updates `uv.lock` with `pyjwt` added in #581. Commit updated file and update CI to fail on inconsistent `uv.lock` via `--locked`. Tested via e6df935: [failed CI run](https://github.com/a2aproject/a2a-python/actions/runs/21206882696/job/61005414117?pr=637).
…638) # Description Run TCK tests with `mandatory` and `capabilities` categories for JSON-RPC transport (GRPC and REST fail at the moment). Re #639 --------- Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com>
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.32.0 to 20.36.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pypa/virtualenv/releases">virtualenv's releases</a>.</em></p> <blockquote> <h2>20.36.1</h2> <!-- raw HTML omitted --> <h2>What's Changed</h2> <ul> <li>release 20.36.0 by <a href="https://github.com/gaborbernat"><code>@gaborbernat</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/3011">pypa/virtualenv#3011</a></li> <li>fix: resolve TOCTOU vulnerabilities in app_data and lock directory creation by <a href="https://github.com/gaborbernat"><code>@gaborbernat</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/3013">pypa/virtualenv#3013</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pypa/virtualenv/compare/20.36.0...20.36.1">https://github.com/pypa/virtualenv/compare/20.36.0...20.36.1</a></p> <h2>20.36.0</h2> <!-- raw HTML omitted --> <h2>What's Changed</h2> <ul> <li>release 20.35.3 by <a href="https://github.com/gaborbernat"><code>@gaborbernat</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/2981">pypa/virtualenv#2981</a></li> <li>fix: Prevent NameError when accessing _DISTUTILS_PATCH during file ov… by <a href="https://github.com/gracetyy"><code>@gracetyy</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/2982">pypa/virtualenv#2982</a></li> <li>Upgrade pip and fix 3.15 picking old wheel by <a href="https://github.com/gaborbernat"><code>@gaborbernat</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/2989">pypa/virtualenv#2989</a></li> <li>release 20.35.4 by <a href="https://github.com/gaborbernat"><code>@gaborbernat</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/2990">pypa/virtualenv#2990</a></li> <li>fix: wrong path on migrated venv by <a href="https://github.com/sk1234567891"><code>@sk1234567891</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/2996">pypa/virtualenv#2996</a></li> <li>test_too_many_open_files: assert on <code>errno.EMFILE</code> instead of <code>strerror</code> by <a href="https://github.com/pltrz"><code>@pltrz</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/3001">pypa/virtualenv#3001</a></li> <li>fix: update filelock dependency version to 3.20.1 to fix CVE CVE-2025-68146 by <a href="https://github.com/pythonhubdev"><code>@pythonhubdev</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/3002">pypa/virtualenv#3002</a></li> <li>fix: resolve EncodingWarning in tox upgrade environment by <a href="https://github.com/gaborbernat"><code>@gaborbernat</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/3007">pypa/virtualenv#3007</a></li> <li>Fix Interpreter discovery bug wrt. Microsoft Store shortcut using Latin-1 by <a href="https://github.com/rahuldevikar"><code>@rahuldevikar</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/3006">pypa/virtualenv#3006</a></li> <li>Add support for PEP 440 version specifiers in the <code>--python</code> flag. by <a href="https://github.com/rahuldevikar"><code>@rahuldevikar</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/3008">pypa/virtualenv#3008</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/gracetyy"><code>@gracetyy</code></a> made their first contribution in <a href="https://redirect.github.com/pypa/virtualenv/pull/2982">pypa/virtualenv#2982</a></li> <li><a href="https://github.com/sk1234567891"><code>@sk1234567891</code></a> made their first contribution in <a href="https://redirect.github.com/pypa/virtualenv/pull/2996">pypa/virtualenv#2996</a></li> <li><a href="https://github.com/pltrz"><code>@pltrz</code></a> made their first contribution in <a href="https://redirect.github.com/pypa/virtualenv/pull/3001">pypa/virtualenv#3001</a></li> <li><a href="https://github.com/pythonhubdev"><code>@pythonhubdev</code></a> made their first contribution in <a href="https://redirect.github.com/pypa/virtualenv/pull/3002">pypa/virtualenv#3002</a></li> <li><a href="https://github.com/rahuldevikar"><code>@rahuldevikar</code></a> made their first contribution in <a href="https://redirect.github.com/pypa/virtualenv/pull/3006">pypa/virtualenv#3006</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pypa/virtualenv/compare/20.35.3...20.36.0">https://github.com/pypa/virtualenv/compare/20.35.3...20.36.0</a></p> <h2>20.35.4</h2> <!-- raw HTML omitted --> <h2>What's Changed</h2> <ul> <li>release 20.35.3 by <a href="https://github.com/gaborbernat"><code>@gaborbernat</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/2981">pypa/virtualenv#2981</a></li> <li>fix: Prevent NameError when accessing _DISTUTILS_PATCH during file ov… by <a href="https://github.com/gracetyy"><code>@gracetyy</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/2982">pypa/virtualenv#2982</a></li> <li>Upgrade pip and fix 3.15 picking old wheel by <a href="https://github.com/gaborbernat"><code>@gaborbernat</code></a> in <a href="https://redirect.github.com/pypa/virtualenv/pull/2989">pypa/virtualenv#2989</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/gracetyy"><code>@gracetyy</code></a> made their first contribution in <a href="https://redirect.github.com/pypa/virtualenv/pull/2982">pypa/virtualenv#2982</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pypa/virtualenv/compare/20.35.3...20.35.4">https://github.com/pypa/virtualenv/compare/20.35.3...20.35.4</a></p> <h2>20.35.3</h2> <!-- raw HTML omitted --> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst">virtualenv's changelog</a>.</em></p> <blockquote> <h2>v20.36.1 (2026-01-09)</h2> <p>Bugfixes - 20.36.1</p> <pre><code>- Fix TOCTOU vulnerabilities in app_data and lock directory creation that could be exploited via symlink attacks - reported by :user:`tsigouris007`, fixed by :user:`gaborbernat`. (:issue:`3013`) <h2>v20.36.0 (2026-01-07)</h2> <p>Features - 20.36.0 </code></pre></p> <ul> <li>Add support for PEP 440 version specifiers in the <code>--python</code> flag. Users can now specify Python versions using operators like <code>>=</code>, <code><=</code>, <code>~=</code>, etc. For example: <code>virtualenv --python=">=3.12" myenv</code> <code>. (:issue:</code>2994`)</li> </ul> <h2>v20.35.4 (2025-10-28)</h2> <p>Bugfixes - 20.35.4</p> <pre><code>- Fix race condition in ``_virtualenv.py`` when file is overwritten during import, preventing ``NameError`` when ``_DISTUTILS_PATCH`` is accessed - by :user:`gracetyy`. (:issue:`2969`) - Upgrade embedded wheels: <ul> <li>pip to <code>25.3</code> from <code>25.2</code> (:issue:<code>2989</code>)</li> </ul> <h2>v20.35.3 (2025-10-10)</h2> <p>Bugfixes - 20.35.3 </code></pre></p> <ul> <li>Accept RuntimeError in <code>test_too_many_open_files</code>, by :user:<code>esafak</code> (:issue:<code>2935</code>)</li> </ul> <h2>v20.35.2 (2025-10-10)</h2> <p>Bugfixes - 20.35.2</p> <pre><code>- Revert out changes related to the extraction of the discovery module - by :user:`gaborbernat`. (:issue:`2978`) <h2>v20.35.1 (2025-10-09)</h2> <p>Bugfixes - 20.35.1 </code></pre></p> <ul> <li>Patch get_interpreter to handle missing cache and app_data - by :user:<code>esafak</code> (:issue:<code>2972</code>)</li> <li>Fix backwards incompatible changes to <code>PythonInfo</code> - by :user:<code>gaborbernat</code>. (:issue:<code>2975</code>)</li> </ul> <h2>v20.35.0 (2025-10-08)</h2> <p>Features - 20.35.0</p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pypa/virtualenv/commit/d0ad11d1146e81ea74d2461be9653f1da9cf3fd1"><code>d0ad11d</code></a> release 20.36.1</li> <li><a href="https://github.com/pypa/virtualenv/commit/dec4cec5d16edaf83a00a658f32d1e032661cebc"><code>dec4cec</code></a> Merge pull request <a href="https://redirect.github.com/pypa/virtualenv/issues/3013">#3013</a> from gaborbernat/fix-sec</li> <li><a href="https://github.com/pypa/virtualenv/commit/5fe5d38beb1273b489591a7b444f1018af2edf0a"><code>5fe5d38</code></a> release 20.36.0 (<a href="https://redirect.github.com/pypa/virtualenv/issues/3011">#3011</a>)</li> <li><a href="https://github.com/pypa/virtualenv/commit/9719376addaa710b61d9ed013774fa26f6224b4e"><code>9719376</code></a> release 20.36.0</li> <li><a href="https://github.com/pypa/virtualenv/commit/0276db6fcf8849c519d75465f659b12aefb2acd8"><code>0276db6</code></a> Add support for PEP 440 version specifiers in the <code>--python</code> flag. (<a href="https://redirect.github.com/pypa/virtualenv/issues/3008">#3008</a>)</li> <li><a href="https://github.com/pypa/virtualenv/commit/4f900c29044e17812981b5b98ddce45604858b7f"><code>4f900c2</code></a> Fix Interpreter discovery bug wrt. Microsoft Store shortcut using Latin-1 (<a href="https://redirect.github.com/pypa/virtualenv/issues/3">#3</a>...</li> <li><a href="https://github.com/pypa/virtualenv/commit/13afcc62a3444d0386c8031d0a62277a8274ab07"><code>13afcc6</code></a> fix: resolve EncodingWarning in tox upgrade environment (<a href="https://redirect.github.com/pypa/virtualenv/issues/3007">#3007</a>)</li> <li><a href="https://github.com/pypa/virtualenv/commit/31b5d31581df3e3a7bbc55e52568b26dd01b0d57"><code>31b5d31</code></a> [pre-commit.ci] pre-commit autoupdate (<a href="https://redirect.github.com/pypa/virtualenv/issues/2997">#2997</a>)</li> <li><a href="https://github.com/pypa/virtualenv/commit/7c284221b4751388801355fc6ebaa2abe60427bd"><code>7c28422</code></a> fix: update filelock dependency version to 3.20.1 to fix CVE CVE-2025-68146 (...</li> <li><a href="https://github.com/pypa/virtualenv/commit/365628c544cd5498fbf0a3b6c6a8c1f41d25a749"><code>365628c</code></a> test_too_many_open_files: assert on <code>errno.EMFILE</code> instead of <code>strerror</code> (<a href="https://redirect.github.com/pypa/virtualenv/issues/3001">#3001</a>)</li> <li>Additional commits viewable in <a href="https://github.com/pypa/virtualenv/compare/20.32.0...20.36.1">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot 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`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@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) - `@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) - `@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) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/a2aproject/a2a-python/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ivan Shymko <vana.shimko@gmail.com>
# Description The cause is florimondmanca/httpx-sse#35: using comments among events with `id` field causes `httpx-sse` to emit an event with empty data. Although according to [the standard (item 2)](https://html.spec.whatwg.org/multipage/server-sent-events.html#dispatchMessage) empty `buffer` shouldn't produce an event, with the way how `httpx-sse` API is defined it may still be reasonable to emit an object with just `retry` field for instance so that consumer could handle it. [The standard](https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation) defines `retry` field handling outside of events dispatching, so in the context of this library it's up to the client (see [here](https://github.com/florimondmanca/httpx-sse?tab=readme-ov-file#handling-reconnections)). That being said, even if comment handling bug is fixed, it still makes sense to add this check against `data` field unconditionally without any TODOs. Tested by mocking one level lower to put `httpx-sse` under test as well as it's an integration issue. Fixes #540 --------- Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com>
Bumps the all group with 27 updates: | Package | From | To | | --- | --- | --- | | [httpx-sse](https://github.com/florimondmanca/httpx-sse) | `0.4.1` | `0.4.3` | | [pydantic](https://github.com/pydantic/pydantic) | `2.11.7` | `2.12.5` | | [protobuf](https://github.com/protocolbuffers/protobuf) | `5.29.5` | `6.33.4` | | [google-api-core](https://github.com/googleapis/python-api-core) | `2.25.1` | `2.29.0` | | [fastapi](https://github.com/fastapi/fastapi) | `0.116.1` | `0.128.0` | | [sse-starlette](https://github.com/sysid/sse-starlette) | `3.0.2` | `3.2.0` | | [starlette](https://github.com/Kludex/starlette) | `0.47.2` | `0.50.0` | | [cryptography](https://github.com/pyca/cryptography) | `45.0.5` | `46.0.3` | | [grpcio](https://github.com/grpc/grpc) | `1.74.0` | `1.76.0` | | [grpcio-tools](https://github.com/grpc/grpc) | `1.71.2` | `1.74.0` | | [grpcio-reflection](https://grpc.io) | `1.71.2` | `1.74.0` | | [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.36.0` | `1.39.1` | | [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python) | `1.36.0` | `1.39.1` | | [datamodel-code-generator](https://github.com/koxudaxi/datamodel-code-generator) | `0.32.0` | `0.53.0` | | [mypy](https://github.com/python/mypy) | `1.17.1` | `1.19.1` | | [pytest](https://github.com/pytest-dev/pytest) | `8.4.1` | `9.0.2` | | [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `1.1.0` | `1.3.0` | | [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `6.2.1` | `7.0.0` | | [pytest-mock](https://github.com/pytest-dev/pytest-mock) | `3.14.1` | `3.15.1` | | [ruff](https://github.com/astral-sh/ruff) | `0.12.8` | `0.14.13` | | [uv-dynamic-versioning](https://github.com/ninoseki/uv-dynamic-versioning) | `0.8.2` | `0.13.0` | | [types-protobuf](https://github.com/typeshed-internal/stub_uploader) | `6.30.2.20250703` | `6.32.1.20251210` | | [types-requests](https://github.com/typeshed-internal/stub_uploader) | `2.32.4.20250611` | `2.32.4.20260107` | | [pre-commit](https://github.com/pre-commit/pre-commit) | `4.2.0` | `4.5.1` | | [pyupgrade](https://github.com/asottile/pyupgrade) | `3.20.0` | `3.21.2` | | [trio](https://github.com/python-trio/trio) | `0.30.0` | `0.32.0` | | [uvicorn](https://github.com/Kludex/uvicorn) | `0.38.0` | `0.40.0` | Updates `httpx-sse` from 0.4.1 to 0.4.3 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/florimondmanca/httpx-sse/releases">httpx-sse's releases</a>.</em></p> <blockquote> <h2>Version 0.4.3</h2> <h2>0.4.3 - 2025-10-10</h2> <h3>Fixed</h3> <ul> <li>Fix performance issue introduced by the improved line parsing from release 0.4.2. (Pull <a href="https://redirect.github.com/florimondmanca/httpx-sse/issues/40">#40</a>)</li> </ul> <h2>Version 0.4.2</h2> <h2>0.4.2 - 2025-10-07</h2> <h3>Fixed</h3> <ul> <li>Fix incorrect newline parsing that was not compliant with SSE spec. (Pull <a href="https://redirect.github.com/florimondmanca/httpx-sse/issues/37">#37</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/florimondmanca/httpx-sse/blob/master/CHANGELOG.md">httpx-sse's changelog</a>.</em></p> <blockquote> <h2>0.4.3 - 2025-10-10</h2> <h3>Fixed</h3> <ul> <li>Fix performance issue introduced by the improved line parsing from release 0.4.2. (Pull <a href="https://redirect.github.com/florimondmanca/httpx-sse/issues/40">#40</a>)</li> </ul> <h2>0.4.2 - 2025-10-07</h2> <h3>Fixed</h3> <ul> <li>Fix incorrect newline parsing that was not compliant with SSE spec. (Pull <a href="https://redirect.github.com/florimondmanca/httpx-sse/issues/37">#37</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/florimondmanca/httpx-sse/commit/e8fcd9e159066185963ffb9fa29efb8ba2ca84bf"><code>e8fcd9e</code></a> Version 0.4.3 (<a href="https://redirect.github.com/florimondmanca/httpx-sse/issues/41">#41</a>)</li> <li><a href="https://github.com/florimondmanca/httpx-sse/commit/6339349ef44add55654daf58776e753554a8dbd6"><code>6339349</code></a> Update CHANGELOG.md</li> <li><a href="https://github.com/florimondmanca/httpx-sse/commit/4787b4f846cf24c75980611b026e5d60213cd2df"><code>4787b4f</code></a> Refactor _splitlines_sse to improve efficiency (<a href="https://redirect.github.com/florimondmanca/httpx-sse/issues/40">#40</a>)</li> <li><a href="https://github.com/florimondmanca/httpx-sse/commit/c3dd81af12687f5243243223ac1a89d47c0cf9f6"><code>c3dd81a</code></a> Version 0.4.2 (<a href="https://redirect.github.com/florimondmanca/httpx-sse/issues/39">#39</a>)</li> <li><a href="https://github.com/florimondmanca/httpx-sse/commit/6297588229e0a213f170101516e41102d7c7647a"><code>6297588</code></a> Changelog for Version 0.4.2</li> <li><a href="https://github.com/florimondmanca/httpx-sse/commit/1ccc0958f5786fe66c0d220ef53e70ddb2158e1b"><code>1ccc095</code></a> SSE spec compliant line parsing (<a href="https://redirect.github.com/florimondmanca/httpx-sse/issues/37">#37</a>)</li> <li>See full diff in <a href="https://github.com/florimondmanca/httpx-sse/compare/0.4.1...0.4.3">compare view</a></li> </ul> </details> <br /> Updates `pydantic` from 2.11.7 to 2.12.5 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pydantic/pydantic/releases">pydantic's releases</a>.</em></p> <blockquote> <h2>v2.12.5 2025-11-26</h2> <h2>v2.12.5 (2025-11-26)</h2> <p>This is the fifth 2.12 patch release, addressing an issue with the <code>MISSING</code> sentinel and providing several documentation improvements.</p> <p>The next 2.13 minor release will be published in a couple weeks, and will include a new <em>polymorphic serialization</em> feature addressing the remaining unexpected changes to the <em>serialize as any</em> behavior.</p> <ul> <li>Fix pickle error when using <code>model_construct()</code> on a model with <code>MISSING</code> as a default value by <a href="https://github.com/ornariece"><code>@ornariece</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/12522">#12522</a>.</li> <li>Several updates to the documentation by <a href="https://github.com/Viicos"><code>@Viicos</code></a>.</li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pydantic/pydantic/compare/v2.12.4...v2.12.5">https://github.com/pydantic/pydantic/compare/v2.12.4...v2.12.5</a></p> <h2>v2.12.4 2025-11-05</h2> <h2>v2.12.4 (2025-11-05)</h2> <p>This is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the <code>build()</code> method of the <a href="https://docs.pydantic.dev/latest/api/networks/"><code>AnyUrl</code> and Dsn types</a>.</p> <p>This patch release also fixes an issue with the serialization of IP address types, when <code>serialize_as_any</code> is used. The next patch release will try to address the remaining issues with <em>serialize as any</em> behavior by introducing a new <em>polymorphic serialization</em> feature, that should be used in most cases in place of <em>serialize as any</em>.</p> <ul> <li> <p>Fix issue with forward references in parent <code>TypedDict</code> classes by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/12427">#12427</a>.</p> <p>This issue is only relevant on Python 3.14 and greater.</p> </li> <li> <p>Exclude fields with <code>exclude_if</code> from JSON Schema required fields by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/12430">#12430</a></p> </li> <li> <p>Revert URL percent-encoding of credentials in the <code>build()</code> method of the <a href="https://docs.pydantic.dev/latest/api/networks/"><code>AnyUrl</code> and Dsn types</a> by <a href="https://github.com/davidhewitt"><code>@davidhewitt</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-core/pull/1833">pydantic-core#1833</a>.</p> <p>This was initially considered as a bugfix, but caused regressions and as such was fully reverted. The next release will include an opt-in option to percent-encode components of the URL.</p> </li> <li> <p>Add type inference for IP address types by <a href="https://github.com/davidhewitt"><code>@davidhewitt</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-core/pull/1868">pydantic-core#1868</a>.</p> <p>The 2.12 changes to the <code>serialize_as_any</code> behavior made it so that IP address types could not properly serialize to JSON.</p> </li> <li> <p>Avoid getting default values from defaultdict by <a href="https://github.com/davidhewitt"><code>@davidhewitt</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-core/pull/1853">pydantic-core#1853</a>.</p> <p>This fixes a subtle regression in the validation behavior of the <a href="https://docs.python.org/3/library/collections.html#collections.defaultdict"><code>collections.defaultdict</code></a> type.</p> </li> <li> <p>Fix issue with field serializers on nested typed dictionaries by <a href="https://github.com/davidhewitt"><code>@davidhewitt</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-core/pull/1879">pydantic-core#1879</a>.</p> </li> <li> <p>Add more <code>pydantic-core</code> builds for the three-threaded version of Python 3.14 by <a href="https://github.com/davidhewitt"><code>@davidhewitt</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-core/pull/1864">pydantic-core#1864</a>.</p> </li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pydantic/pydantic/compare/v2.12.3...v2.12.4">https://github.com/pydantic/pydantic/compare/v2.12.3...v2.12.4</a></p> <h2>v2.12.3 2025-10-17</h2> <h2>v2.12.3 (2025-10-17)</h2> <h3>What's Changed</h3> <p>This is the third 2.13 patch release, fixing issues related to the <code>FieldInfo</code> class, and reverting a change to the supported <a href="https://docs.pydantic.dev/latest/concepts/validators/#model-validators"><em>after</em> model validator</a> function signatures.</p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pydantic/pydantic/blob/main/HISTORY.md">pydantic's changelog</a>.</em></p> <blockquote> <h2>v2.12.5 (2025-11-26)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.12.5">GitHub release</a></p> <p>This is the fifth 2.12 patch release, addressing an issue with the <code>MISSING</code> sentinel and providing several documentation improvements.</p> <p>The next 2.13 minor release will be published in a couple weeks, and will include a new <em>polymorphic serialization</em> feature addressing the remaining unexpected changes to the <em>serialize as any</em> behavior.</p> <ul> <li>Fix pickle error when using <code>model_construct()</code> on a model with <code>MISSING</code> as a default value by <a href="https://github.com/ornariece"><code>@ornariece</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/12522">#12522</a>.</li> <li>Several updates to the documentation by <a href="https://github.com/Viicos"><code>@Viicos</code></a>.</li> </ul> <h2>v2.12.4 (2025-11-05)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.12.4">GitHub release</a></p> <p>This is the fourth 2.12 patch release, fixing more regressions, and reverting a change in the <code>build()</code> method of the <a href="https://docs.pydantic.dev/latest/api/networks/"><code>AnyUrl</code> and Dsn types</a>.</p> <p>This patch release also fixes an issue with the serialization of IP address types, when <code>serialize_as_any</code> is used. The next patch release will try to address the remaining issues with <em>serialize as any</em> behavior by introducing a new <em>polymorphic serialization</em> feature, that should be used in most cases in place of <em>serialize as any</em>.</p> <ul> <li> <p>Fix issue with forward references in parent <code>TypedDict</code> classes by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/12427">#12427</a>.</p> <p>This issue is only relevant on Python 3.14 and greater.</p> </li> <li> <p>Exclude fields with <code>exclude_if</code> from JSON Schema required fields by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/12430">#12430</a></p> </li> <li> <p>Revert URL percent-encoding of credentials in the <code>build()</code> method of the <a href="https://docs.pydantic.dev/latest/api/networks/"><code>AnyUrl</code> and Dsn types</a> by <a href="https://github.com/davidhewitt"><code>@davidhewitt</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-core/pull/1833">pydantic-core#1833</a>.</p> <p>This was initially considered as a bugfix, but caused regressions and as such was fully reverted. The next release will include an opt-in option to percent-encode components of the URL.</p> </li> <li> <p>Add type inference for IP address types by <a href="https://github.com/davidhewitt"><code>@davidhewitt</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-core/pull/1868">pydantic-core#1868</a>.</p> <p>The 2.12 changes to the <code>serialize_as_any</code> behavior made it so that IP address types could not properly serialize to JSON.</p> </li> <li> <p>Avoid getting default values from defaultdict by <a href="https://github.com/davidhewitt"><code>@davidhewitt</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-core/pull/1853">pydantic-core#1853</a>.</p> <p>This fixes a subtle regression in the validation behavior of the <a href="https://docs.python.org/3/library/collections.html#collections.defaultdict"><code>collections.defaultdict</code></a> type.</p> </li> <li> <p>Fix issue with field serializers on nested typed dictionaries by <a href="https://github.com/davidhewitt"><code>@davidhewitt</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-core/pull/1879">pydantic-core#1879</a>.</p> </li> <li> <p>Add more <code>pydantic-core</code> builds for the three-threaded version of Python 3.14 by <a href="https://github.com/davidhewitt"><code>@davidhewitt</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-core/pull/1864">pydantic-core#1864</a>.</p> </li> </ul> <h2>v2.12.3 (2025-10-17)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.12.3">GitHub release</a></p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pydantic/pydantic/commit/bd2d0dd0137dfa1a8fdff2529b9dfb1547980150"><code>bd2d0dd</code></a> Prepare release v2.12.5</li> <li><a href="https://github.com/pydantic/pydantic/commit/7d0302ec7ec2cf115de3450a615522875bdd8b56"><code>7d0302e</code></a> Document security implications when using <code>create_model()</code></li> <li><a href="https://github.com/pydantic/pydantic/commit/e9ef980def726b6f59b6c495ddc9dc259a0228db"><code>e9ef980</code></a> Fix typo in Standard Library Types documentation</li> <li><a href="https://github.com/pydantic/pydantic/commit/f2c20c00c265a31a13c48f9bae923a87c829952e"><code>f2c20c0</code></a> Add <code>pydantic-docs</code> dev dependency, make use of versioning blocks</li> <li><a href="https://github.com/pydantic/pydantic/commit/a76c1aa26f2d64a3fd080ac515d80832689197e8"><code>a76c1aa</code></a> Update documentation about JSON Schema</li> <li><a href="https://github.com/pydantic/pydantic/commit/8cbc72ca489891e574fba45238ee8bd4f8e719a2"><code>8cbc72c</code></a> Add documentation about custom <code>__init__()</code></li> <li><a href="https://github.com/pydantic/pydantic/commit/99eba599069da137b3f708ffa74627f2b456ba73"><code>99eba59</code></a> Add additional test for <code>FieldInfo.get_default()</code></li> <li><a href="https://github.com/pydantic/pydantic/commit/c71076988e507ea93844c77c3bf0bbb85a5716af"><code>c710769</code></a> Special case <code>MISSING</code> sentinel in <code>smart_deepcopy()</code></li> <li><a href="https://github.com/pydantic/pydantic/commit/20a9d771c210fd77d52366ac923258c4c199727f"><code>20a9d77</code></a> Do not delete mock validator/serializer in <code>rebuild_dataclass()</code></li> <li><a href="https://github.com/pydantic/pydantic/commit/c86515a3a8f2120148fab2eaedd3bc45925779d0"><code>c86515a</code></a> Update parts of the model and <code>revalidate_instances</code> documentation</li> <li>Additional commits viewable in <a href="https://github.com/pydantic/pydantic/compare/v2.11.7...v2.12.5">compare view</a></li> </ul> </details> <br /> Updates `protobuf` from 5.29.5 to 6.33.4 <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/protocolbuffers/protobuf/commits">compare view</a></li> </ul> </details> <br /> Updates `google-api-core` from 2.25.1 to 2.29.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/googleapis/python-api-core/releases">google-api-core's releases</a>.</em></p> <blockquote> <h2>google-api-core 2.29.0</h2> <h2><a href="https://github.com/googleapis/python-api-core/compare/v2.28.1...v2.29.0">2.29.0</a> (2026-01-08)</h2> <h3>Features</h3> <ul> <li> <p>make parse_version_to_tuple public (<a href="https://redirect.github.com/googleapis/python-api-core/issues/864">#864</a>) (<a href="https://github.com/googleapis/python-api-core/commit/c969186f">c969186f</a>)</p> </li> <li> <p>Auto enable mTLS when supported certificates are detected (<a href="https://redirect.github.com/googleapis/python-api-core/issues/869">#869</a>) (<a href="https://github.com/googleapis/python-api-core/commit/f8bf6f96">f8bf6f96</a>)</p> </li> </ul> <h3>Bug Fixes</h3> <ul> <li> <p>remove call to importlib.metadata.packages_distributions() for py38/py39 (<a href="https://redirect.github.com/googleapis/python-api-core/issues/859">#859</a>) (<a href="https://github.com/googleapis/python-api-core/commit/628003e2">628003e2</a>)</p> </li> <li> <p>Log version check errors (<a href="https://redirect.github.com/googleapis/python-api-core/issues/858">#858</a>) (<a href="https://github.com/googleapis/python-api-core/commit/6493118c">6493118c</a>)</p> </li> <li> <p>flaky tests due to imprecision in floating point calculation and performance test setup (<a href="https://redirect.github.com/googleapis/python-api-core/issues/865">#865</a>) (<a href="https://github.com/googleapis/python-api-core/commit/93404080">93404080</a>)</p> </li> <li> <p>closes tailing streams in bidi classes. (<a href="https://redirect.github.com/googleapis/python-api-core/issues/851">#851</a>) (<a href="https://github.com/googleapis/python-api-core/commit/c97b3a00">c97b3a00</a>)</p> </li> </ul> <h2>v2.28.1</h2> <h2><a href="https://github.com/googleapis/python-api-core/compare/v2.28.0...v2.28.1">2.28.1</a> (2025-10-28)</h2> <h3>Bug Fixes</h3> <ul> <li>Remove dependency on packaging and pkg_resources (<a href="https://redirect.github.com/googleapis/python-api-core/issues/852">#852</a>) (<a href="https://github.com/googleapis/python-api-core/commit/ca59a863b08a79c2bf0607f9085de1417422820b">ca59a86</a>)</li> </ul> <h2>v2.28.0</h2> <h2><a href="https://github.com/googleapis/python-api-core/compare/v2.27.0...v2.28.0">2.28.0</a> (2025-10-24)</h2> <h3>Features</h3> <ul> <li>Provide and use Python version support check (<a href="https://redirect.github.com/googleapis/python-api-core/issues/832">#832</a>) (<a href="https://github.com/googleapis/python-api-core/commit/d36e896f98a2371c4d58ce1a7a3bc1a77a081836">d36e896</a>)</li> </ul> <h2>v2.27.0</h2> <h2><a href="https://github.com/googleapis/python-api-core/compare/v2.26.0...v2.27.0">2.27.0</a> (2025-10-22)</h2> <h3>Features</h3> <ul> <li>Support for async bidi streaming apis (<a href="https://redirect.github.com/googleapis/python-api-core/issues/836">#836</a>) (<a href="https://github.com/googleapis/python-api-core/commit/95305480d234b6dd0903960db020e55125a997e0">9530548</a>)</li> </ul> <h2>v2.26.0</h2> <h2><a href="https://github.com/googleapis/python-api-core/compare/v2.25.2...v2.26.0">2.26.0</a> (2025-10-08)</h2> <h3>Features</h3> <ul> <li>Add trove classifier for Python 3.14 (<a href="https://redirect.github.com/googleapis/python-api-core/issues/842">#842</a>) (<a href="https://github.com/googleapis/python-api-core/commit/43690de33a23321d52ab856e2bf253590e1a9357">43690de</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/googleapis/python-api-core/blob/main/CHANGELOG.md">google-api-core's changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/googleapis/google-cloud-python/compare/google-api-core-v2.28.1...google-api-core-v2.29.0">2.29.0</a> (2026-01-08)</h2> <h3>Features</h3> <ul> <li>Auto enable mTLS when supported certificates are detected (<a href="https://redirect.github.com/googleapis/python-api-core/issues/869">#869</a>) (<a href="https://github.com/googleapis/google-cloud-python/commit/f8bf6f9610f3e0e7580f223794c3906513e1fa73">f8bf6f9610f3e0e7580f223794c3906513e1fa73</a>)</li> <li>make parse_version_to_tuple public (<a href="https://redirect.github.com/googleapis/python-api-core/issues/864">#864</a>) (<a href="https://github.com/googleapis/google-cloud-python/commit/c969186f2b66bde1df5e25bbedc5868e27d136f9">c969186f2b66bde1df5e25bbedc5868e27d136f9</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li>flaky tests due to imprecision in floating point calculation and performance test setup (<a href="https://redirect.github.com/googleapis/python-api-core/issues/865">#865</a>) (<a href="https://github.com/googleapis/google-cloud-python/commit/93404080f853699b9217e4b76391a13525db4e3e">93404080f853699b9217e4b76391a13525db4e3e</a>)</li> <li>remove call to importlib.metadata.packages_distributions() for py38/py39 (<a href="https://redirect.github.com/googleapis/python-api-core/issues/859">#859</a>) (<a href="https://github.com/googleapis/google-cloud-python/commit/628003e217d9a881d24f3316aecfd48c244a73f0">628003e217d9a881d24f3316aecfd48c244a73f0</a>)</li> <li>Log version check errors (<a href="https://redirect.github.com/googleapis/python-api-core/issues/858">#858</a>) (<a href="https://github.com/googleapis/google-cloud-python/commit/6493118cae2720696c3d0097274edfd7fe2bce67">6493118cae2720696c3d0097274edfd7fe2bce67</a>)</li> <li>closes tailing streams in bidi classes. (<a href="https://redirect.github.com/googleapis/python-api-core/issues/851">#851</a>) (<a href="https://github.com/googleapis/google-cloud-python/commit/c97b3a004044ebf8b35c2a7ba97409d7795e11b0">c97b3a004044ebf8b35c2a7ba97409d7795e11b0</a>)</li> </ul> <h2><a href="https://github.com/googleapis/python-api-core/compare/v2.28.0...v2.28.1">2.28.1</a> (2025-10-28)</h2> <h3>Bug Fixes</h3> <ul> <li>Remove dependency on packaging and pkg_resources (<a href="https://redirect.github.com/googleapis/python-api-core/issues/852">#852</a>) (<a href="https://github.com/googleapis/python-api-core/commit/ca59a863b08a79c2bf0607f9085de1417422820b">ca59a86</a>)</li> </ul> <h2><a href="https://github.com/googleapis/python-api-core/compare/v2.27.0...v2.28.0">2.28.0</a> (2025-10-24)</h2> <h3>Features</h3> <ul> <li>Provide and use Python version support check (<a href="https://redirect.github.com/googleapis/python-api-core/issues/832">#832</a>) (<a href="https://github.com/googleapis/python-api-core/commit/d36e896f98a2371c4d58ce1a7a3bc1a77a081836">d36e896</a>)</li> </ul> <h2><a href="https://github.com/googleapis/python-api-core/compare/v2.26.0...v2.27.0">2.27.0</a> (2025-10-22)</h2> <h3>Features</h3> <ul> <li>Support for async bidi streaming apis (<a href="https://redirect.github.com/googleapis/python-api-core/issues/836">#836</a>) (<a href="https://github.com/googleapis/python-api-core/commit/95305480d234b6dd0903960db020e55125a997e0">9530548</a>)</li> </ul> <h2><a href="https://github.com/googleapis/python-api-core/compare/v2.25.2...v2.26.0">2.26.0</a> (2025-10-08)</h2> <h3>Features</h3> <ul> <li>Add trove classifier for Python 3.14 (<a href="https://redirect.github.com/googleapis/python-api-core/issues/842">#842</a>) (<a href="https://github.com/googleapis/python-api-core/commit/43690de33a23321d52ab856e2bf253590e1a9357">43690de</a>)</li> </ul> <h2><a href="https://github.com/googleapis/python-api-core/compare/v2.25.1...v2.25.2">2.25.2</a> (2025-10-01)</h2> <h3>Bug Fixes</h3> <ul> <li>Deprecate credentials_file argument (<a href="https://redirect.github.com/googleapis/python-api-core/issues/841">#841</a>) (<a href="https://github.com/googleapis/python-api-core/commit/324eb7464d6ade9a8c2e413d4695bc7d7adfcb3d">324eb74</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/googleapis/python-api-core/commit/014d3def6ac4fdd5b39d5296a5aad10a546fde21"><code>014d3de</code></a> chore: librarian release pull request: 20260108T134327Z (<a href="https://redirect.github.com/googleapis/python-api-core/issues/883">#883</a>)</li> <li><a href="https://github.com/googleapis/python-api-core/commit/2d93bd1e189a5c67d993bd78f38ee68d4e6429df"><code>2d93bd1</code></a> tests: remove pytype nox session (<a href="https://redirect.github.com/googleapis/python-api-core/issues/876">#876</a>)</li> <li><a href="https://github.com/googleapis/python-api-core/commit/0fe0632cbf432e4ae9ef477e0719e64256a3b834"><code>0fe0632</code></a> chore: fix mypy check (<a href="https://redirect.github.com/googleapis/python-api-core/issues/882">#882</a>)</li> <li><a href="https://github.com/googleapis/python-api-core/commit/f8bf6f9610f3e0e7580f223794c3906513e1fa73"><code>f8bf6f9</code></a> feat: Auto enable mTLS when supported certificates are detected (<a href="https://redirect.github.com/googleapis/python-api-core/issues/869">#869</a>)</li> <li><a href="https://github.com/googleapis/python-api-core/commit/f0188c6f9c4dc2036f50fa5d8a8b9433749872d2"><code>f0188c6</code></a> chore: update github action workflow permissions (<a href="https://redirect.github.com/googleapis/python-api-core/issues/875">#875</a>)</li> <li><a href="https://github.com/googleapis/python-api-core/commit/d211307fd5a418489837270ee4a0cdbf4ef3fe57"><code>d211307</code></a> tests: refactor unit test nox sessions (<a href="https://redirect.github.com/googleapis/python-api-core/issues/873">#873</a>)</li> <li><a href="https://github.com/googleapis/python-api-core/commit/2196e2affabe670dd2bde448d7641084fad3d83c"><code>2196e2a</code></a> chore: remove sync-repo-settings.yaml which is not used (<a href="https://redirect.github.com/googleapis/python-api-core/issues/872">#872</a>)</li> <li><a href="https://github.com/googleapis/python-api-core/commit/54d1d364c1ba7426ae61d623f967314174758468"><code>54d1d36</code></a> tests: update default python runtime used in tests to 3.14 (<a href="https://redirect.github.com/googleapis/python-api-core/issues/870">#870</a>)</li> <li><a href="https://github.com/googleapis/python-api-core/commit/93404080f853699b9217e4b76391a13525db4e3e"><code>9340408</code></a> fix: flaky tests due to imprecision in floating point calculation and perform...</li> <li><a href="https://github.com/googleapis/python-api-core/commit/c969186f2b66bde1df5e25bbedc5868e27d136f9"><code>c969186</code></a> feat: make parse_version_to_tuple public (<a href="https://redirect.github.com/googleapis/python-api-core/issues/864">#864</a>)</li> <li>Additional commits viewable in <a href="https://github.com/googleapis/python-api-core/compare/v2.25.1...v2.29.0">compare view</a></li> </ul> </details> <br /> Updates `fastapi` from 0.116.1 to 0.128.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/fastapi/fastapi/releases">fastapi's releases</a>.</em></p> <blockquote> <h2>0.128.0</h2> <h3>Breaking Changes</h3> <ul> <li>➖ Drop support for <code>pydantic.v1</code>. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14609">#14609</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> </ul> <h3>Internal</h3> <ul> <li>✅ Run performance tests only on Pydantic v2. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14608">#14608</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> </ul> <h2>0.127.1</h2> <h3>Refactors</h3> <ul> <li>🔊 Add a custom <code>FastAPIDeprecationWarning</code>. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14605">#14605</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> </ul> <h3>Docs</h3> <ul> <li>📝 Add documentary to website. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14600">#14600</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> </ul> <h3>Translations</h3> <ul> <li>🌐 Update translations for de (update-outdated). PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14602">#14602</a> by <a href="https://github.com/nilslindemann"><code>@nilslindemann</code></a>.</li> <li>🌐 Update translations for de (update-outdated). PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14581">#14581</a> by <a href="https://github.com/nilslindemann"><code>@nilslindemann</code></a>.</li> </ul> <h3>Internal</h3> <ul> <li>🔧 Update pre-commit to use local Ruff instead of hook. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14604">#14604</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> <li>✅ Add missing tests for code examples. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14569">#14569</a> by <a href="https://github.com/YuriiMotov"><code>@YuriiMotov</code></a>.</li> <li>👷 Remove <code>lint</code> job from <code>test</code> CI workflow. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14593">#14593</a> by <a href="https://github.com/YuriiMotov"><code>@YuriiMotov</code></a>.</li> <li>👷 Update secrets check. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14592">#14592</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> <li>👷 Run CodSpeed tests in parallel to other tests to speed up CI. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14586">#14586</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> <li>🔨 Update scripts and pre-commit to autofix files. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14585">#14585</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> </ul> <h2>0.127.0</h2> <h3>Breaking Changes</h3> <ul> <li>🔊 Add deprecation warnings when using <code>pydantic.v1</code>. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14583">#14583</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> </ul> <h3>Translations</h3> <ul> <li>🔧 Add LLM prompt file for Korean, generated from the existing translations. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14546">#14546</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> <li>🔧 Add LLM prompt file for Japanese, generated from the existing translations. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14545">#14545</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> </ul> <h3>Internal</h3> <ul> <li>⬆️ Upgrade OpenAI model for translations to gpt-5.2. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14579">#14579</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> </ul> <h2>0.126.0</h2> <h3>Upgrades</h3> <ul> <li>➖ Drop support for Pydantic v1, keeping short temporary support for Pydantic v2's <code>pydantic.v1</code>. PR <a href="https://redirect.github.com/fastapi/fastapi/pull/14575">#14575</a> by <a href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/fastapi/fastapi/commit/8322a4445a3b25acd9b26b61192571b2d92f9bcd"><code>8322a44</code></a> 🔖 Release version 0.128.0</li> <li><a href="https://github.com/fastapi/fastapi/commit/4b2cfcfd34d0b2e158a05b377426e0c8376b94de"><code>4b2cfcf</code></a> 📝 Update release notes</li> <li><a href="https://github.com/fastapi/fastapi/commit/e3006305518a56ea35f62a31748ad26fe4356fcc"><code>e300630</code></a> ➖ Drop support for <code>pydantic.v1</code> (<a href="https://redirect.github.com/fastapi/fastapi/issues/14609">#14609</a>)</li> <li><a href="https://github.com/fastapi/fastapi/commit/1b3bea8b6be2220cc1544653ea785d2134fcb35b"><code>1b3bea8</code></a> 📝 Update release notes</li> <li><a href="https://github.com/fastapi/fastapi/commit/34e884156f38dff4094a7764ff895c4d4b872060"><code>34e8841</code></a> ✅ Run performance tests only on Pydantic v2 (<a href="https://redirect.github.com/fastapi/fastapi/issues/14608">#14608</a>)</li> <li><a href="https://github.com/fastapi/fastapi/commit/cd90c78391f86f3fd06d5b327bffad9666b05b44"><code>cd90c78</code></a> 🔖 Release version 0.127.1</li> <li><a href="https://github.com/fastapi/fastapi/commit/93f4dfd88b7d62bda89eb521ebd9322e357e6fff"><code>93f4dfd</code></a> 📝 Update release notes</li> <li><a href="https://github.com/fastapi/fastapi/commit/535b5daa317a9d1d1f9a1058e57650a7beefa861"><code>535b5da</code></a> 🔊 Add a custom <code>FastAPIDeprecationWarning</code> (<a href="https://redirect.github.com/fastapi/fastapi/issues/14605">#14605</a>)</li> <li><a href="https://github.com/fastapi/fastapi/commit/6b53786f626db95a42fd0f66afd360bab161f4b1"><code>6b53786</code></a> 📝 Update release notes</li> <li><a href="https://github.com/fastapi/fastapi/commit/d98f4eb56eae3155034fe631d9639d95171fb9ab"><code>d98f4eb</code></a> 🔧 Update pre-commit to use local Ruff instead of hook (<a href="https://redirect.github.com/fastapi/fastapi/issues/14604">#14604</a>)</li> <li>Additional commits viewable in <a href="https://github.com/fastapi/fastapi/compare/0.116.1...0.128.0">compare view</a></li> </ul> </details> <br /> Updates `sse-starlette` from 3.0.2 to 3.2.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/sysid/sse-starlette/releases">sse-starlette's releases</a>.</em></p> <blockquote> <h2>v3.2.0</h2> <h2>What's Changed</h2> <ul> <li>[feat] Allow disabling automatic draining immediately on sigterm by <a href="https://github.com/yuliy-openai"><code>@yuliy-openai</code></a> in <a href="https://redirect.github.com/sysid/sse-starlette/pull/157">sysid/sse-starlette#157</a></li> <li>feat: add enable_automatic_graceful_drain_mode() for re-enabling auto… by <a href="https://github.com/sysid"><code>@sysid</code></a> in <a href="https://redirect.github.com/sysid/sse-starlette/pull/158">sysid/sse-starlette#158</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/yuliy-openai"><code>@yuliy-openai</code></a> made their first contribution in <a href="https://redirect.github.com/sysid/sse-starlette/pull/157">sysid/sse-starlette#157</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/sysid/sse-starlette/compare/v3.1.2...v3.2.0">https://github.com/sysid/sse-starlette/compare/v3.1.2...v3.2.0</a></p> <h2>v3.1.2</h2> <h2>What's Changed</h2> <ul> <li>fix: prevent watcher task leak by using threading.local (<a href="https://redirect.github.com/sysid/sse-starlette/issues/152">#152</a>) by <a href="https://github.com/sysid"><code>@sysid</code></a> in <a href="https://redirect.github.com/sysid/sse-starlette/pull/153">sysid/sse-starlette#153</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/sysid/sse-starlette/compare/v3.1.1...v3.1.2">https://github.com/sysid/sse-starlette/compare/v3.1.1...v3.1.2</a></p> <h2>v3.1.1</h2> <h2>What's Changed</h2> <ul> <li>fix(shutdown): detect uvicorn shutdown via signal handler introspection by <a href="https://github.com/sysid"><code>@sysid</code></a> in <a href="https://redirect.github.com/sysid/sse-starlette/pull/151">sysid/sse-starlette#151</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/sysid/sse-starlette/compare/v3.1.0...v3.1.1">https://github.com/sysid/sse-starlette/compare/v3.1.0...v3.1.1</a></p> <h2>v3.1.0</h2> <h2>What's Changed</h2> <ul> <li>chore(deps): bump actions/setup-python from 3 to 6 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/sysid/sse-starlette/pull/143">sysid/sse-starlette#143</a></li> <li>Fix Issue <a href="https://redirect.github.com/sysid/sse-starlette/issues/149">#149</a>: handle_exit cannot signal context-local events by <a href="https://github.com/sysid"><code>@sysid</code></a> in <a href="https://redirect.github.com/sysid/sse-starlette/pull/150">sysid/sse-starlette#150</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/sysid/sse-starlette/compare/v3.0.4...v3.1.0">https://github.com/sysid/sse-starlette/compare/v3.0.4...v3.1.0</a></p> <h2>v3.0.4</h2> <h2>What's Changed</h2> <ul> <li>Add starlette to dependencies by <a href="https://github.com/WOnder93"><code>@WOnder93</code></a> in <a href="https://redirect.github.com/sysid/sse-starlette/pull/147">sysid/sse-starlette#147</a></li> <li>Maintenance: CI updates, Python 3.13 support, and packaging fixes by <a href="https://github.com/sysid"><code>@sysid</code></a> in <a href="https://redirect.github.com/sysid/sse-starlette/pull/148">sysid/sse-starlette#148</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/WOnder93"><code>@WOnder93</code></a> made their first contribution in <a href="https://redirect.github.com/sysid/sse-starlette/pull/147">sysid/sse-starlette#147</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/sysid/sse-starlette/compare/v3.0.3...v3.0.4">https://github.com/sysid/sse-starlette/compare/v3.0.3...v3.0.4</a></p> <h2>v3.0.3</h2> <h2>What's Changed</h2> <ul> <li>Security: Upgrade Starlette to 0.49.1 to address CVE-2025-62727 by <a href="https://github.com/ColeMurray"><code>@ColeMurray</code></a> in <a href="https://redirect.github.com/sysid/sse-starlette/pull/144">sysid/sse-starlette#144</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/ColeMurray"><code>@ColeMurray</code></a> made their first contribution in <a href="https://redirect.github.com/sysid/sse-starlette/pull/144">sysid/sse-starlette#144</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/sysid/sse-starlette/compare/v3.0.2...v3.0.3">https://github.com/sysid/sse-starlette/compare/v3.0.2...v3.0.3</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/sysid/sse-starlette/commit/9101a42cb27395bb4a2700b79934809a19abfdbf"><code>9101a42</code></a> Bump version to 3.2.0</li> <li><a href="https://github.com/sysid/sse-starlette/commit/c3248fcdc2512fdec7ae00512785b0bf1fb0d3b8"><code>c3248fc</code></a> Merge pull request <a href="https://redirect.github.com/sysid/sse-starlette/issues/158">#158</a> from sysid/pr-157</li> <li><a href="https://github.com/sysid/sse-starlette/commit/c99dd676c08de8f840f65ab56252607abeaf09eb"><code>c99dd67</code></a> Merge pull request <a href="https://redirect.github.com/sysid/sse-starlette/issues/157">#157</a> from yuliy-openai/optional_auto_drain</li> <li><a href="https://github.com/sysid/sse-starlette/commit/ed3577721b2f78775b538f79cc0e8452431c66cd"><code>ed35777</code></a> feat: add enable_automatic_graceful_drain_mode() for re-enabling auto-drain</li> <li><a href="https://github.com/sysid/sse-starlette/commit/15f26cb4163d884d813da52a95d9fb1d4bb50397"><code>15f26cb</code></a> [feat] Allow disabling automatic draining immediately on sigterm</li> <li><a href="https://github.com/sysid/sse-starlette/commit/fc50af6bb26566a57c9b88b7b917234878365182"><code>fc50af6</code></a> chore: update gitignore</li> <li><a href="https://github.com/sysid/sse-starlette/commit/268b3cd3029388cb09434120679e650eb1f4e76e"><code>268b3cd</code></a> feat: add pre-commit hooks for format, lint, and mypy</li> <li><a href="https://github.com/sysid/sse-starlette/commit/618ac0e62caf7e15ec716197212cbe1b2a1a4254"><code>618ac0e</code></a> Bump version to 3.1.2</li> <li><a href="https://github.com/sysid/sse-starlette/commit/6d68ba9484c9f32f3299bbb069b5877f1db37453"><code>6d68ba9</code></a> Merge pull request <a href="https://redirect.github.com/sysid/sse-starlette/issues/153">#153</a> from sysid/fix/152_shutdown_watcher_leak</li> <li><a href="https://github.com/sysid/sse-starlette/commit/89faa043d16b6cbb85025068544ea4da4a17941f"><code>89faa04</code></a> fix: prevent watcher task leak with threading.local (<a href="https://redirect.github.com/sysid/sse-starlette/issues/152">#152</a>)</li> <li>Additional commits viewable in <a href="https://github.com/sysid/sse-starlette/compare/v3.0.2...v3.2.0">compare view</a></li> </ul> </details> <br /> Updates `starlette` from 0.47.2 to 0.50.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/Kludex/starlette/releases">starlette's releases</a>.</em></p> <blockquote> <h2>Version 0.50.0</h2> <h2>Removed</h2> <ul> <li>Drop Python 3.9 support <a href="https://redirect.github.com/Kludex/starlette/pull/3061">#3061</a>.</li> </ul> <hr /> <p><strong>Full Changelog</strong>: <a href="https://github.com/Kludex/starlette/compare/0.49.3...0.50.0">https://github.com/Kludex/starlette/compare/0.49.3...0.50.0</a></p> <h2>Version 0.49.3</h2> <h2>Fixed</h2> <ul> <li>Relax strictness on <code>Middleware</code> type <a href="https://redirect.github.com/Kludex/starlette/pull/3059">#3059</a>.</li> </ul> <hr /> <p><strong>Full Changelog</strong>: <a href="https://github.com/Kludex/starlette/compare/0.49.2...0.49.3">https://github.com/Kludex/starlette/compare/0.49.2...0.49.3</a></p> <h2>Version 0.49.2</h2> <h2>Fixed</h2> <ul> <li>Ignore <code>if-modified-since</code> header if <code>if-none-match</code> is present in <code>StaticFiles</code> <a href="https://redirect.github.com/Kludex/starlette/pull/3044">#3044</a>.</li> </ul> <hr /> <p><strong>Full Changelog</strong>: <a href="https://github.com/Kludex/starlette/compare/0.49.1...0.49.2">https://github.com/Kludex/starlette/compare/0.49.1...0.49.2</a></p> <h2>Version 0.49.1</h2> <p>This release fixes a security vulnerability in the parsing logic of the <code>Range</code> header in <code>FileResponse</code>.</p> <p>You can view the full security advisory: <a href="https://github.com/Kludex/starlette/security/advisories/GHSA-7f5h-v6xp-fcq8">GHSA-7f5h-v6xp-fcq8</a></p> <h2>Fixed</h2> <ul> <li>Optimize the HTTP ranges parsing logic <a href="https://github.com/Kludex/starlette/commit/4ea6e22b489ec388d6004cfbca52dd5b147127c5">4ea6e22b489ec388d6004cfbca52dd5b147127c5</a></li> </ul> <hr /> <p><strong>Full Changelog</strong>: <a href="https://github.com/Kludex/starlette/compare/0.49.0...0.49.1">https://github.com/Kludex/starlette/compare/0.49.0...0.49.1</a></p> <h2>Version 0.49.0</h2> <h2>Added</h2> <ul> <li>Add <code>encoding</code> parameter to <code>Config</code> class <a href="https://redirect.github.com/Kludex/starlette/pull/2996">#2996</a>.</li> <li>Support multiple cookie headers in <code>Request.cookies</code> <a href="https://redirect.github.com/Kludex/starlette/pull/3029">#3029</a>.</li> <li>Use <code>Literal</code> type for <code>WebSocketEndpoint</code> encoding values <a href="https://redirect.github.com/Kludex/starlette/pull/3027">#3027</a>.</li> </ul> <h2>Changed</h2> <ul> <li>Do not pollute exception context in <code>Middleware</code> when using <code>BaseHTTPMiddleware</code> <a href="https://redirect.github.com/Kludex/starlette/pull/2976">#2976</a>.</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/Kludex/starlette/blob/main/docs/release-notes.md">starlette's changelog</a>.</em></p> <blockquote> <h2>0.50.0 (November 1, 2025)</h2> <h4>Removed</h4> <ul> <li>Drop Python 3.9 support <a href="https://redirect.github.com/Kludex/starlette/pull/3061">#3061</a>.</li> </ul> <h2>0.49.3 (November 1, 2025)</h2> <p>This is the last release that supports Python 3.9, which will be dropped in the next minor release.</p> <h4>Fixed</h4> <ul> <li>Relax strictness on <code>Middleware</code> type <a href="https://redirect.github.com/Kludex/starlette/pull/3059">#3059</a>.</li> </ul> <h2>0.49.2 (November 1, 2025)</h2> <h4>Fixed</h4> <ul> <li>Ignore <code>if-modified-since</code> header if <code>if-none-match</code> is present in <code>StaticFiles</code> <a href="https://redirect.github.com/Kludex/starlette/pull/3044">#3044</a>.</li> </ul> <h2>0.49.1 (October 28, 2025)</h2> <p>This release fixes a security vulnerability in the parsing logic of the <code>Range</code> header in <code>FileResponse</code>.</p> <p>You can view the full security advisory: <a href="https://github.com/Kludex/starlette/security/advisories/GHSA-7f5h-v6xp-fcq8">GHSA-7f5h-v6xp-fcq8</a></p> <h4>Fixed</h4> <ul> <li>Optimize the HTTP ranges parsing logic <a href="https://github.com/Kludex/starlette/commit/4ea6e22b489ec388d6004cfbca52dd5b147127c5">4ea6e22b489ec388d6004cfbca52dd5b147127c5</a></li> </ul> <h2>0.49.0 (October 28, 2025)</h2> <h4>Added</h4> <ul> <li>Add <code>encoding</code> parameter to <code>Config</code> class <a href="https://redirect.github.com/Kludex/starlette/pull/2996">#2996</a>.</li> <li>Support multiple cookie headers in <code>Request.cookies</code> <a href="https://redirect.github.com/Kludex/starlette/pull/3029">#3029</a>.</li> <li>Use <code>Literal</code> type for <code>WebSocketEndpoint</code> encoding values <a href="https://redirect.github.com/Kludex/starlette/pull/3027">#3027</a>.</li> </ul> <h4>Changed</h4> <ul> <li>Do not pollute exception context in <code>Middleware</code> when using <code>BaseHTTPMiddleware</code> <a href="https://redirect.github.com/Kludex/starlette/pull/2976">#2976</a>.</li> </ul> <h2>0.48.0 (September 13, 2025)</h2> <h4>Added</h4> <ul> <li>Add official Python 3.14 support <a href="https://redirect.github.com/Kludex/starlette/pull/3013">#3013</a>.</li> </ul> <h4>Changed</h4> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/Kludex/starlette/commit/4941b4a04993d087dea66e9287fe9472babee879"><code>4941b4a</code></a> Version 0.50.0 (<a href="https://redirect.github.com/Kludex/starlette/issues/3063">#3063</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/a0499f60a6f13b8b42381d70bafc076b6ece4eee"><code>a0499f6</code></a> Drop support for Python 3.9 (<a href="https://redirect.github.com/Kludex/starlette/issues/3061">#3061</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/de3ffecaeadd34612f71495374f5853edbda1bf2"><code>de3ffec</code></a> Version 0.49.3 (<a href="https://redirect.github.com/Kludex/starlette/issues/3062">#3062</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/c4433960ccc07289e0963df94dc5c2746f07ca1a"><code>c443396</code></a> Relax strictness on <code>Middleware</code> type (<a href="https://redirect.github.com/Kludex/starlette/issues/3059">#3059</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/85bf0275fbf26f5a7fef539a03bebfeb125b9ea3"><code>85bf027</code></a> Version 0.49.2 (<a href="https://redirect.github.com/Kludex/starlette/issues/3058">#3058</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/3d480dd7d5adf474d0736c67a2a3064e88226837"><code>3d480dd</code></a> Ignore <code>if-modified-since</code> if <code>if-none-match</code> is present (<a href="https://redirect.github.com/Kludex/starlette/issues/3057">#3057</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/da0605243010715356be69693a524f2300011948"><code>da06052</code></a> Bump the github-actions group with 3 updates (<a href="https://redirect.github.com/Kludex/starlette/issues/3056">#3056</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/34caa9900f47b9ab5afffa5f4ee148a00940f622"><code>34caa99</code></a> Add groups configuration for GitHub Actions (<a href="https://redirect.github.com/Kludex/starlette/issues/3055">#3055</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/7e4b7428f273dbdc875dcd036d20804bcfc7b2ee"><code>7e4b742</code></a> Version 0.49.1 (<a href="https://redirect.github.com/Kludex/starlette/issues/3047">#3047</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/4ea6e22b489ec388d6004cfbca52dd5b147127c5"><code>4ea6e22</code></a> Merge commit from fork</li> <li>Additional commits viewable in <a href="https://github.com/Kludex/starlette/compare/0.47.2...0.50.0">compare view</a></li> </ul> </details> <br /> Updates `cryptography` from 45.0.5 to 46.0.3 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst">cryptography's changelog</a>.</em></p> <blockquote> <p>46.0.3 - 2025-10-15</p> <pre><code> * Fixed compilation when using LibreSSL 4.2.0. <p>.. _v46-0-2:</p> <p>46.0.2 - 2025-09-30<br /> </code></pre></p> <ul> <li>Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.4.</li> </ul> <p>.. _v46-0-1:</p> <p>46.0.1 - 2025-09-16</p> <pre><code> * Fixed an issue where users installing via ``pip`` on Python 3.14 development versions would not properly install a dependency. * Fixed an issue building the free-threaded macOS 3.14 wheels. <p>.. _v46-0-0:</p> <p>46.0.0 - 2025-09-16<br /> </code></pre></p> <ul> <li><strong>BACKWARDS INCOMPATIBLE:</strong> Support for Python 3.7 has been removed.</li> <li>Support for OpenSSL < 3.0 is deprecated and will be removed in the next release.</li> <li>Support for <code>x86_64</code> macOS (including publishing wheels) is deprecated and will be removed in two releases. We will switch to publishing an <code>arm64</code> only wheel for macOS.</li> <li>Support for 32-bit Windows (including publishing wheels) is deprecated and will be removed in two releases. Users should move to a 64-bit Python installation.</li> <li>Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.3.</li> <li>We now build <code>ppc64le</code> <code>manylinux</code> wheels and publish them to PyPI.</li> <li>We now build <code>win_arm64</code> (Windows on Arm) wheels and publish them to PyPI.</li> <li>Added support for free-threaded Python 3.14.</li> <li>Removed the deprecated <code>get_attribute_for_oid</code> method on :class:<code>~cryptography.x509.CertificateSigningRequest</code>. Users should use :meth:<code>~cryptography.x509.Attributes.get_attribute_for_oid</code> instead.</li> <li>Removed the deprecated <code>CAST5</code>, <code>SEED</code>, <code>IDEA</code>, and <code>Blowfish</code> classes from the cipher module. These are still available in :doc:<code>/hazmat/decrepit/index</code>.</li> <li>In X.509, when performing a PSS signature with a SHA-3 hash, it is now encoded with the official NIST SHA3 OID.</li> </ul> <p>.. _v45-0-7:</p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pyca/cryptography/commit/c0af4dd7b75921bbe9f1d41a03dbd4b64a9e3403"><code>c0af4dd</code></a> release 46.0.3 (<a href="https://redirect.github.com/pyca/cryptography/issues/13681">#13681</a>)</li> <li><a href="https://github.com/pyca/cryptography/commit/99efe5ad150a56efadafacaffd0e3ee319373904"><code>99efe5a</code></a> bump version for 46.0.2 (<a href="https://redirect.github.com/pyca/cryptography/issues/13531">#13531</a>)</li> <li><a href="https://github.com/pyca/cryptography/commit/e735cfc27502320101c130335c556394a125ba52"><code>e735cfc</code></a> release 46.0.1 (<a href="https://redirect.github.com/pyca/cryptography/issues/13450">#13450</a>)</li> <li><a href="https://github.com/pyca/cryptography/commit/4e457ffba43a6d87efc63c33041e2081438dd8a4"><code>4e457ff</code></a> Explicitly specify python in mac uv build invocation (<a href="https://redirect.github.com/pyca/cryptography/issues/13447">#13447</a>)</li> <li><a href="https://github.com/pyca/cryptography/commit/2726efdb6d67f1c90cf9c6062d9fe051965586f8"><code>2726efd</code></a> Depend on CFFI 2.0.0 or newer on Python > 3.8 (<a href="https://redirect.github.com/pyca/cryptography/issues/13448">#13448</a>)</li> <li><a href="https://github.com/pyca/cryptography/commit/62230623d183706632c0eb7822c96ac95e3710a8"><code>6223062</code></a> release 46.0.0 (<a href="https://redirect.github.com/pyca/cryptography/issues/13446">#13446</a>)</li> <li><a href="https://github.com/pyca/cryptography/commit/563c4915b0931455706f761a4579c26698824eae"><code>563c491</code></a> Update comment for pyopenssl-release tag (<a href="https://redirect.github.com/pyca/cryptography/issues/13445">#13445</a>)</li> <li><a href="https://github.com/pyca/cryptography/commit/d2f6f7faced35b73277bc624ff496f8af696b172"><code>d2f6f7f</code></a> Bump downstream dependencies in CI (<a href="https://redirect.github.com/pyca/cryptography/issues/13439">#13439</a>)</li> <li><a href="https://github.com/pyca/cryptography/commit/e7ab02bd679d0b4f55d93486fe27e62554ef15d4"><code>e7ab02b</code></a> we'll ship this with 3.5.3 why not (<a href="https://redirect.github.com/pyca/cryptography/issues/13442">#13442</a>)</li> <li><a href="https://github.com/pyca/cryptography/commit/0b68a4bffb61202e4d4f5074cd30c2b9d15f429e"><code>0b68a4b</code></a> Another pair of bump dependencies fix (<a href="https://redirect.github.com/pyca/cryptography/issues/13444">#13444</a>)</li> <li>Additional commits viewable in <a href="https://github.com/pyca/cryptography/compare/45.0.5...46.0.3">compare view</a></li> </ul> </details> <br /> Updates `grpcio` from 1.74.0 to 1.76.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/grpc/grpc/releases">grpcio's releases</a>.</em></p> <blockquote> <h2>Release v1.76.0</h2> <p>This is release 1.76.0 (<a href="https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md">genuine</a>) of gRPC Core.</p> <p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>. For previous releases, see <a href="https://github.com/grpc/grpc/releases">Releases</a>.</p> <p>This release contains refinements, improvements, and bug fixes, with highlights listed below.</p> <h2>Core</h2> <ul> <li>Prioritize system CA over bundled CA. (<a href="https://redirect.github.com/grpc/grpc/pull/40583">#40583</a>)</li> <li>[event_engine] Introduce a event_engine_poller_for_python experiment. (<a href="https://redirect.github.com/grpc/grpc/pull/40243">#40243</a>)</li> <li>[metrics] add grpc.lb.backend_service label. (<a href="https://redirect.github.com/grpc/grpc/pull/40486">#40486</a>)</li> </ul> <h2>C#</h2> <ul> <li>[csharp tools] <a href="https://redirect.github.com/grpc/grpc/issues/39374">#39374</a> Grpc.Tools can't process file Suffix name with Upper character. (<a href="https://redirect.github.com/grpc/grpc/pull/40072">#40072</a>)</li> </ul> <h2>Python</h2> <ul> <li>[Python] gRPC AsyncIO: Improve CompletionQueue polling performance. (<a href="https://redirect.github.com/grpc/grpc/pull/39993">#39993</a>)</li> </ul> <h2>Release v1.76.0-pre1</h2> <p>This is a prerelease of gRPC Core 1.76.0 (genuine).</p> <p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>. For previous releases, see <a href="https://github.com/grpc/grpc/releases">Releases</a>.</p> <p>This prerelease contains refinements, improvements, and bug fixes.</p> <h2>Release v1.75.1</h2> <p>This is release gRPC Core 1.75.1 (gemini).</p> <p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>. For previous releases, see <a href="https://github.com/grpc/grpc/releases">Releases</a>.</p> <p>This release contains refinements, improvements, and bug fixes.</p> <h2>What's Changed</h2> <h3>Python</h3> <ul> <li>Release grpcio wheels with Python 3.14 support (<a href="https://redirect.github.com/grpc/grpc/issues/40403">#40403</a>)</li> <li>Asyncio: fixes grpc shutdown race condition occurring during python interpreter finalizations. (<a href="https://redirect.github.com/grpc/grpc/issues/40447">#40447</a>) <ul> <li>This also addresses previously reported issues with empty error message on Python interpreter exit (<code>Error in sys.excepthook:</code>/<code>Original exception was:</code> empty): <a href="https://redirect.github.com/grpc/grpc/issues/36655">#36655</a>, <a href="https://redirect.github.com/grpc/grpc/issues/38679">#38679</a>, <a href="https://redirect.github.com/grpc/grpc/issues/33342">#33342</a></li> </ul> </li> <li>Python 3.14: preserve current behavior when using grpc.aio async methods outside of a running event loop. (<a href="https://redirect.github.com/grpc/grpc/issues/40750">#40750</a>) <ul> <li>Note: using async methods outside of a running event loop is <a href="https://docs.python.org/3.14/library/asyncio-policy.html#asyncio-policies">discouraged</a> by Python, and <strong>will be deprecated in future gRPC releases</strong>. Please use the <a href="https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.run">asyncio.run()</a> function (or <a href="https://docs.python.org/3.14/library/asyncio-runner.html#asyncio.Runner">asyncio.Runner</a> for custom loop factories). For interactive mode, use dedicated <a href="https://docs.python.org/3/library/asyncio.html#asyncio-cli">asyncio REPL</a>: <code>python -m asyncio</code>.</li> </ul> </li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/grpc/grpc/compare/v1.75.0...v1.75.1">https://github.com/grpc/grpc/compare/v1.75.0...v1.75.1</a></p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/grpc/grpc/commit/f5ffb68d8a2fd603dff16287e90a4ac571e1fec6"><code>f5ffb68</code></a> [Release] Bump version to 1.76.0 (on v1.76.x branch) (<a href="https://redirect.github.com/grpc/grpc/issues/40925">#40925</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/ffd83794b3804739c0789096155833e302ac1270"><code>ffd8379</code></a> [Release] Bump version to 1.76.0-pre1 (on v1.76.x branch) (<a href="https://redirect.github.com/grpc/grpc/issues/40798">#40798</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/835d394034060002262ab4e404e552ac0393a1a1"><code>835d394</code></a> [Release] Bump core version to 51.0.0 for upcoming release (<a href="https://redirect.github.com/grpc/grpc/issues/40784">#40784</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/de6ce7f32b1bf254d2b4c04e8872b63284632fd3"><code>de6ce7f</code></a> [PH2] Add files for goaway support (<a href="https://redirect.github.com/grpc/grpc/issues/40786">#40786</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/f7dd7f4b4186049d104aa2c88ad4432f58c19ede"><code>f7dd7f4</code></a> [PH2][Trivial][CleanUp]</li> <li><a href="https://github.com/grpc/grpc/commit/2d40a376c7ea72602fa7bc62606324b1ff14c44f"><code>2d40a37</code></a> [PH2][ChannelZ][ZTrace][Skeleton]</li> <li><a href="https://github.com/grpc/grpc/commit/83acb278bef565d8d46d6e19582eaacc86f737a3"><code>83acb27</code></a> [build] Add Missing Dependencies for reflection_proto in Preparation for Enab...</li> <li><a href="https://github.com/grpc/grpc/commit/abfe8a29d31a8ab9ff6cdda11cdfa2813cb59632"><code>abfe8a2</code></a> [PH2] Stream list represents streams open for reads.</li> <li><a href="https://github.com/grpc/grpc/commit/c65d8de800aaa907b45cee54ebcd29d5b556d3ca"><code>c65d8de</code></a> [PH2][Expt] Fix the experiment expiry</li> <li><a href="https://github.com/grpc/grpc/commit/755d025f16d20641155e89ecc46777e94e9e172d"><code>755d025</code></a> Fix latent_see_test flakiness</li> <li>Additional commits viewable in <a href="https://github.com/grpc/grpc/compare/v1.74.0...v1.76.0">compare view</a></li> </ul> </details> <br /> Updates `grpcio-tools` from 1.71.2 to 1.74.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/grpc/grpc/releases">grpcio-tools's releases</a>.</em></p> <blockquote> <h2>Release v1.74.0</h2> <p>This is release 1.74.0 (<a href="https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md">gee</a>) of gRPC Core.</p> <p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>. For previous releases, see <a href="https://github.com/grpc/grpc/releases">Releases</a>.</p> <p>This release contains refinements, improvements, and bug fixes, with highlights listed below.</p> <h2>Core</h2> <ul> <li>[OTel C++, Posix EE] Plumb TCP write timestamps and metrics to OTel tracers. (<a href="https://redirect.github.com/grpc/grpc/pull/39946">#39946</a>)</li> <li>[event_engine] Implement fork support in Posix Event Engine. (<a href="https://redirect.github.com/grpc/grpc/pull/38980">#38980</a>)</li> <li>[http2] Fix GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES for when BDP is disabled. (<a href="https://redirect.github.com/grpc/grpc/pull/39585">#39585</a>)</li> </ul> <h2>Objective-C</h2> <ul> <li>[dep] Upgrade Protobuf Version 31.1. (<a href="https://redirect.github.com/grpc/grpc/pull/39916">#39916</a>)</li> </ul> <h2>PHP</h2> <ul> <li>[PHP] Fully qualify stdClass with global namespace. (<a href="https://redirect.github.com/grpc/grpc/pull/39996">#39996</a>)</li> <li>[php] Fix PHPDoc so that UnaryCall defines the proper return type. (<a href="https://redirect.github.com/grpc/grpc/pull/37563">#37563</a>)</li> <li>fix typing of nullable parameters. (<a href="https://redirect.github.com/grpc/grpc/pull/39199">#39199</a>)</li> </ul> <h2>Python</h2> <ul> <li>[EventEngine] Fix the issue with gRPC Python Client not reconnecting in certain situations: <a href="https://redirect.github.com/grpc/grpc/issues/38290">#38290</a>, <a href="https://redirect.github.com/grpc/grpc/issues/39113">#39113</a>, <a href="https://redirect.github.com/grpc/grpc/issues/39631">#39631</a>. (<a href="https://redirect.github.com/grpc/grpc/issues/39894">#39894</a>)</li> <li>Fix gRPC Python docs website layout - use spaces optimally. (<a href="https://redirect.github.com/grpc/grpc/pull/40073">#40073</a>)</li> </ul> <h2>Ruby</h2> <ul> <li>[Ruby] Add rubygems support for linux-gnu and linux-musl platforms . (<a href="https://redirect.github.com/grpc/grpc/pull/40174">#40174</a>)</li> <li>[ruby] enable EE fork support. (<a href="https://redirect.github.com/grpc/grpc/pull/39786">#39786</a>)</li> <li>[ruby] Return nil for c functions expected to return a VALUE. (<a href="https://redirect.github.com/grpc/grpc/pull/39214">#39214</a>)</li> <li>[ruby] remove connectivity state watch thread, fix cancellations from spurious signals. (<a href="https://redirect.github.com/grpc/grpc/pull/39409">#39409</a>)</li> <li>[ruby] Drop Ruby 3.0 support. (<a href="https://redirect.github.com/grpc/grpc/pull/39607">#39607</a>)</li> </ul> <h2>Release v1.74.0-pre2</h2> <p>This is a prerelease of gRPC Core 1.74.0 (gee).</p> <p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>. For previous releases, see <a href="https://github.com/grpc/grpc/releases">Releases</a>.</p> <p>This prerelease contains refinements, improvements, and bug fixes.</p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/grpc/grpc/commit/3e7a4d52d257990fa5b9d80f69f4a591178d9d7c"><code>3e7a4d5</code></a> [Release] Bump version to 1.74.0 (on v1.74.x branch) (<a href="https://redirect.github.com/grpc/grpc/issues/40290">#40290</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/b2d32db3e1a6221c22d4a008930e1e54e45f1930"><code>b2d32db</code></a> [Backport][v1.74.x][Python] Fix for windows distribtest (<a href="https://redirect.github.com/grpc/grpc/issues/40241">#40241</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/a7d80a7e90729849b052c7f36456514dcd1d6752"><code>a7d80a7</code></a> [ruby] bump timeout for ruby artifact build on 1.74.x branch (<a href="https://redirect.github.com/grpc/grpc/issues/40230">#40230</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/2a6bf865d7000fa5e415a9e5685b2fd612b9ccc7"><code>2a6bf86</code></a> [Release] Bump version to 1.74.0-pre2 (on v1.74.x branch) (<a href="https://redirect.github.com/grpc/grpc/issues/40216">#40216</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/c8dcda63a8c1f91224c75e4311f847db5f42745a"><code>c8dcda6</code></a> [Backport-to-1.74.x] Added missing useful to cf_event_engine (<a href="https://redirect.github.com/grpc/grpc/issues/40210">#40210</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/1c64908e6b68ea0dabf62ca6d3af8a8958e6c970"><code>1c64908</code></a> [Ruby] Add rubygems support for linux-gnu and linux-musl platforms (<a href="https://redirect.github.com/grpc/grpc/issues/40174">#40174</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/08648d377dfd8ada795a7ad8068b48dcb24bd328"><code>08648d3</code></a> [Backport][v1.74.x][event_engine] Fix race conditions in the timer manager sh...</li> <li><a href="https://github.com/grpc/grpc/commit/5d59f8e8517bb6a5f2865be63a06b2976b105…
# Description Support disabling OTEL instrumentation via the a2a-sdk using an environment variable `OTEL_A2A_SDK_INSTRUMENTATION_ENABLED` Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [x] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md). - [x] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - Important Prefixes for [release-please](https://github.com/googleapis/release-please): - `fix:` which represents bug fixes, and correlates to a [SemVer](https://semver.org/) patch. - `feat:` represents a new feature, and correlates to a SemVer minor. - `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking change (indicated by the `!`) and will result in a SemVer major. - [x] Ensure the tests and linter pass (Run `bash scripts/format.sh` from the repository root to format) - [x] Appropriate docs were updated (if necessary) Fixes #604 🦕 Release-As: 0.3.23
# Description Based on [`unit-tests.yml`](https://github.com/a2aproject/a2a-python/blob/main/.github/workflows/unit-tests.yml). Supports: - `--debug` to start DB(s) without running tests (for selective running in IDE) - `--mysql`, `--postgres` to use only one DB - `--stop` to stop after running with `--debug` From project root: ```bash ./scripts/run_integration_tests.sh ``` Re #652 to troubleshoot failures
# Description Do not use `NULLS LAST` which is not available in MySQL, coalesce nulls to empty strings which will appear last in descending ordering (there are tests for this behavior already, however CI wasn't enabled for this branch). Currently `NULLS LAST` fails MySQL tests: ``` (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULLS LAST, tasks.id DESC \n LIMIT 51' at line 3") ``` ([actions run](https://github.com/a2aproject/a2a-python/actions/runs/21520017047/job/62008309612?pr=651)) Enable tests run against `1.0-dev` to prevent it in the future. Re #511 Fixes #652 --- Mark as "refactor" for release please as it's a fix for a non-released feature, hence shouldn't get into a changelog. BEGIN_COMMIT_OVERRIDE refactor: use MySQL compatible syntax in list tasks END_COMMIT_OVERRIDE
# Conflicts: # CHANGELOG.md # tests/client/transports/test_rest_client.py # tests/utils/test_proto_utils.py
# Description Words from 2698cc0 pushed to main branch directly used to fail #658. Ignoring URLs according to the [docs](https://docs.check-spelling.dev/Configuration-Examples:-patterns). The fix was tested in the affected PR: [before](https://github.com/a2aproject/a2a-python/actions/runs/21582994306), [after](https://github.com/a2aproject/a2a-python/actions/runs/21584577892).
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.4 to 46.0.5. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst">cryptography's changelog</a>.</em></p> <blockquote> <p>46.0.5 - 2026-02-10</p> <pre><code> * An attacker could create a malicious public key that reveals portions of your private key when using certain uncommon elliptic curves (binary curves). This version now includes additional security checks to prevent this attack. This issue only affects binary elliptic curves, which are rarely used in real-world applications. Credit to **XlabAI Team of Tencent Xuanwu Lab and Atuin Automated Vulnerability Discovery Engine** for reporting the issue. **CVE-2026-26007** * Support for ``SECT*`` binary elliptic curves is deprecated and will be removed in the next release. <p>.. v46-0-4:<br /> </code></pre></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pyca/cryptography/commit/06e120e682cb200e3f7050c02f0bcdac90c4c6ad"><code>06e120e</code></a> bump version for 46.0.5 release (<a href="https://redirect.github.com/pyca/cryptography/issues/14289">#14289</a>)</li> <li><a href="https://github.com/pyca/cryptography/commit/0eebb9dbb6343d9bc1d91e5a2482ed4e054a6d8c"><code>0eebb9d</code></a> EC check key on cofactor > 1 (<a href="https://redirect.github.com/pyca/cryptography/issues/14287">#14287</a>)</li> <li><a href="https://github.com/pyca/cryptography/commit/bedf6e186b814f69a3f54f51252c23a71d44ed2e"><code>bedf6e1</code></a> fix openssl version on 46 branch (<a href="https://redirect.github.com/pyca/cryptography/issues/14220">#14220</a>)</li> <li>See full diff in <a href="https://github.com/pyca/cryptography/compare/46.0.4...46.0.5">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot 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`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@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) - `@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) - `@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) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/a2aproject/a2a-python/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This PR fixes two issues related to the grpc support: 1. The extension headers key in the metadata are supposed to be lower key ([ref](https://github.com/grpc/grpc/blob/ce463633548e47c05343bc1243f9ea95b700a908/src/core/lib/surface/validate_metadata.cc#L99)) 2. Invokes correctly the `servicer_context.invocation_metadata` as a [method](https://grpc.github.io/grpc/python/grpc_asyncio.html#grpc.aio.ServicerContext.invocation_metadata) instead of as a property For each of these issues was respectively opened a community PR (#635 , #673). To speed up the integration of these changes, this new PR has been created to integrate both changes at the same time. Fixes #656 --------- Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com> Co-authored-by: Ivan Shymko <ishymko@google.com>
# Description Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [x] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md). - [x] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - Important Prefixes for [release-please](https://github.com/googleapis/release-please): - `fix:` which represents bug fixes, and correlates to a [SemVer](https://semver.org/) patch. - `feat:` represents a new feature, and correlates to a SemVer minor. - `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking change (indicated by the `!`) and will result in a SemVer major. - [x] Ensure the tests and linter pass (Run `bash scripts/format.sh` from the repository root to format) - [x] Appropriate docs were updated (if necessary) Fixes #674 🦕 ## Problem `ClientTransport` defines an abstract `close()` method but does not implement `__aenter__`/`__aexit__`. This means transports cannot be used with `async with`, which is the idiomatic Python pattern for managing async resources. If an exception occurs between creating a transport and calling `close()`, the underlying connection (e.g., gRPC channel, httpx client) is never cleaned up: ```python transport = GrpcTransport(channel=channel, agent_card=agent_card) result = await transport.send_message(params) # if this raises, close() is never called await transport.close() ``` ## Fix Added `__aenter__` and `__aexit__` methods to `ClientTransport` in `src/a2a/client/transports/base.py`: `__aenter__` returns `self`. `__aexit__` awaits `close()`. This enables the standard async context manager pattern on all transport implementations (`GrpcTransport`, `RestTransport`, `JsonRpcTransport`): ```python async with GrpcTransport(channel=channel, agent_card=agent_card) as transport: result = await transport.send_message(params) # close() called automatically, even on exceptions ``` This is a non-breaking, additive change. Calling `close()` manually or via `try/finally` continues to work exactly as before. ## Test Tests were added to `tests/client/test_base_client.py` since it already imports and mocks `ClientTransport`. Happy to move them to a dedicated file if maintainers prefer. ## Note As mentioned in #674, the same pattern could also be applied to `BaseClient`, which wraps `ClientTransport` and also exposes a `close()` method. I've kept this PR scoped to `ClientTransport` only. Happy to extend it to `BaseClient` in this same PR or a follow-up if maintainers prefer. Release-As: 0.3.23 --------- Co-authored-by: Ivan Shymko <vana.shimko@gmail.com>
[`Metadata` is a `Collection`](https://grpc.github.io/grpc/python/_modules/grpc/aio/_metadata.html) so iterating over key-value tuples is possible, there are existing tests in `test_grpc_handler.py`. Re #676
…ith server errors (#683) # Description Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [x] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md). - [x] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - Important Prefixes for [release-please](https://github.com/googleapis/release-please): - `fix:` which represents bug fixes, and correlates to a [SemVer](https://semver.org/) patch. - `feat:` represents a new feature, and correlates to a SemVer minor. - `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking change (indicated by the `!`) and will result in a SemVer major. - [x] Ensure the tests and linter pass (Run `bash scripts/format.sh` from the repository root to format) - [x] Appropriate docs were updated (if necessary) Fixes #679 🦕 ## Problem Server-side exceptions (`ServerError`) implement `__repr__` for developer-friendly debugging output, but client-side exceptions (`A2AClientHTTPError`, `A2AClientJSONError`, `A2AClientTimeoutError`, `A2AClientInvalidArgsError`, `A2AClientInvalidStateError`, `A2AClientJSONRPCError`) do not. When these exceptions appear during debugging, they show minimal information via the default `Exception.__repr__`, which only wraps `str()` output and loses structured attributes: ```python >>> repr(A2AClientHTTPError(404, 'Not Found')) "A2AClientHTTPError('HTTP Error 404: Not Found')" # Loses status_code as a distinct attribute ```` For `A2AClientJSONRPCError`, the situation is worse — `repr` flattens the underlying `JSONRPCError` object into a single string, losing structured access to the error code and data during inspection. ## Fix Added `__repr__` methods to all client exception classes in `src/a2a/client/errors.py`, following the same pattern already established by `ServerError.__repr__` in `src/a2a/utils/errors.py`: ```python >>> repr(A2AClientHTTPError(404, 'Not Found')) "A2AClientHTTPError(status_code=404, message='Not Found')" ```` `A2AClientJSONError`, `A2AClientTimeoutError`, `A2AClientInvalidArgsError`, `A2AClientInvalidStateError`: Expose message as a `keyword` argument. ```python >>> repr(A2AClientTimeoutError('Connection timed out after 30s')) "A2AClientTimeoutError(message='Connection timed out after 30s')" ``` `A2AClientJSONRPCError`: Delegates to `repr()` of the inner `JSONRPCError` object, preserving structured error code and data. ```python >>> repr(A2AClientJSONRPCError(response)) "A2AClientJSONRPCError(JSONRPCError(code=-32600, message='Invalid Request', data=None))" ``` This change does not alter traceback formatting, `__str__` output, exception hierarchy, catching behavior, or any existing error handling logic. It is purely additive and intended to improve debuggability via `repr()` in REPLs, logs, and structured logging contexts. ## Test Tests were added directly into the existing suite at `tests/client/test_errors.py`, keeping the same structure and conventions already in place. No existing test was modified or removed — all additions are purely additive. Happy to adapt the test approach based on maintainer feedback. Release-As: 0.3.23 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
#614) This PR addresses potential deadlocks and resource leaks in the DefaultRequestHandler when agent execution fails, particularly in non-streaming scenarios. Fixes #609 🦕 --------- Co-authored-by: Łukasz Bobiński <bobinski@google.com> Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com> Co-authored-by: Ivan Shymko <ishymko@google.com>
This reverts commit 40613ed. Should be merged without squashing
# Description Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [x] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/a2a-python/blob/main/CONTRIBUTING.md). - [x] Make your Pull Request title in the <https://www.conventionalcommits.org/> specification. - Important Prefixes for [release-please](https://github.com/googleapis/release-please): - `fix:` which represents bug fixes, and correlates to a [SemVer](https://semver.org/) patch. - `feat:` represents a new feature, and correlates to a SemVer minor. - `feat!:`, or `fix!:`, `refactor!:`, etc., which represent a breaking change (indicated by the `!`) and will result in a SemVer major. - [x] Ensure the tests and linter pass (Run `bash scripts/format.sh` from the repository root to format) - [x] Appropriate docs were updated (if necessary) Follow-up to #682, as suggested by @ishymko in the [review](#682 (review)). This extends the async context manager pattern to `BaseClient`, which wraps `ClientTransport` and also exposes a `close()` method. Fixes #674 🦕 ## Problem `BaseClient` delegates resource cleanup to its underlying `ClientTransport` via `close()`, but doesn't implement `__aenter__`/`__aexit__`. This means clients cannot be used with `async with`, leading to the same resource leak risk that #682 solved for transports: ```python client = BaseClient(card=card, config=config, transport=transport, consumers=[], middleware=[]) result = await client.send_message(msg) # if this raises, close() is never called await client.close() ``` ## Fix Added `__aenter__` and `__aexit__` methods to `BaseClient` in `src/a2a/client/base_client.py`: `__aenter__` returns `self` `__aexit__ `awaits `close()` This enables the standard async context manager pattern: ```python async with BaseClient(card=card, config=config, transport=transport, consumers=[], middleware=[]) as client: async for event in client.send_message(msg): ... # close() called automatically, even on exceptions ``` This is a non-breaking, additive change. Calling `close()` manually or via `try/finally` continues to work exactly as before. ## Test Tests were added to `tests/client/test_base_client.py`, following the same approach as the `ClientTransport` tests from #682. Release-As: 0.3.23
…PC clients (#690) This PR standardizes timeout error handling across the JSON-RPC and REST clients. Previously, only the JSON-RPC client (in non-streaming mode) handled `ReadTimeout` exceptions, while streaming calls and the REST client catch them incorrectly. Updating both `JsonRpcTransport` and `RestTransport` to catch the base httpx.TimeoutException, all timeout types (Read, Connect, Write, Pool) are consistently caught and wrapped in A2AClientTimeoutError. This ensures consistent behavior for API consumers regardless of the transport (REST vs JSON-RPC) or mode (Streaming vs Non-Streaming) being used, preventing generic errors when network timeouts occur.
Summary of ChangesHello @ishymko, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request introduces a significant refactoring of the A2A Python SDK by transitioning its internal data models from Pydantic to Protocol Buffer messages. This change aims to enhance type safety, improve performance, and streamline the development workflow by leveraging Proto's robust serialization and deserialization capabilities. The update also simplifies the client-side API by deprecating older client classes in favor of a more flexible factory pattern, and integrates automated generation of Python types and API documentation from the Proto definitions. Highlights
Changelog
Ignored Files
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
6c06780 to
43ae5d6
Compare
There was a problem hiding this comment.
Code Review
This pull request represents a significant and impressive refactoring, migrating the project's data models from Pydantic (based on JSON Schema) to Protobuf. The changes are extensive and touch almost every part of the codebase, including the client, server, transports, and tests. The result is a much cleaner and more robust implementation, especially with the removal of the complex proto_utils conversion layer and the direct use of Protobuf types throughout the SDK. The API has also been improved for consistency, for example, by making send_message always return a consistent iterator type.
My main concern is the removal of the .pre-commit-config.yaml file, which seems to eliminate important automated checks for code quality, security, and commit message conventions. While I see a format.sh script is mentioned, the loss of tools like gitleaks is worrying.
I also have a minor suggestion regarding the sed command used for post-processing generated gRPC files, which could potentially be made more robust.
Overall, this is a high-quality refactoring that significantly improves the SDK's architecture.
I am having trouble creating individual review comments. Click here to see my feedback.
.pre-commit-config.yaml (1-82)
The removal of the pre-commit configuration is a significant change that could impact code quality and security. This file configured several important hooks, including gitleaks for secret scanning, commitizen for conventional commits, and various linters and formatters. While I see a format.sh script is mentioned in the PR template, it's not clear if it replaces all the functionality, especially the security scanning. Could you please clarify the reasoning behind removing pre-commit hooks and ensure that equivalent checks are in place in the CI/CD pipeline?
scripts/gen_proto.sh (21)
The sed command to fix the import path in the generated gRPC file is a common workaround, but it can be brittle if the generated code format changes in the future. It might be worth investigating if the buf.build/grpc/python plugin offers an option to generate relative imports directly. For example, some protoc plugins have options like --python_out=...:src to control the output structure and import paths. If not, this is acceptable, but a plugin-native solution would be more robust.
43ae5d6 to
03ba6d9
Compare
This will apply changes in
mainsince the1.0-a2a_proto_refactorwas created from 3bfbea9 and "list tasks" feature implemented in1.0-dev(d5818e5 and 5a2ca75).ishymko/1.0-a2a_proto_refactoris created as a temporary backup branch to simplify reasoning about the diff. It's going to be merged into1.0-devseparately.UPD
Issues discovered and fixed after merge in #697:
.github/workflows/linter.yaml- syntax issue - missing spacesrc/a2a/utils/test_helpers.py- test file duplicated in non-test codeRe #559.