From ad522708c53a472181900aac2c9f9b30e81ce735 Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Tue, 2 Jun 2026 16:17:09 -0400 Subject: [PATCH 1/3] kick off release --- .../changes/fix-multipart-filename-2026-5-29-17-50-0.md | 7 ------- ...ix-python-multi-etag-collision-2026-05-27-10-15-00.md | 7 ------- ...thon-prerelease-version-stamping-2026-5-27-13-30-0.md | 7 ------- packages/http-client-python/CHANGELOG.md | 9 +++++++++ packages/http-client-python/package.json | 2 +- 5 files changed, 10 insertions(+), 22 deletions(-) delete mode 100644 .chronus/changes/fix-multipart-filename-2026-5-29-17-50-0.md delete mode 100644 .chronus/changes/fix-python-multi-etag-collision-2026-05-27-10-15-00.md delete mode 100644 .chronus/changes/fix-python-prerelease-version-stamping-2026-5-27-13-30-0.md diff --git a/.chronus/changes/fix-multipart-filename-2026-5-29-17-50-0.md b/.chronus/changes/fix-multipart-filename-2026-5-29-17-50-0.md deleted file mode 100644 index a0bdf8c55b8..00000000000 --- a/.chronus/changes/fix-multipart-filename-2026-5-29-17-50-0.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: fix -packages: - - "@typespec/http-client-python" ---- - -Synthesize filename in multipart Content-Disposition for bare file inputs. When callers pass bare bytes/str/IO instead of a (filename, content) tuple for multipart file fields, the `prepare_multipart_form_data` helper now wraps them with a synthesized filename so servers that require `filename=` in the Content-Disposition header no longer reject the upload. diff --git a/.chronus/changes/fix-python-multi-etag-collision-2026-05-27-10-15-00.md b/.chronus/changes/fix-python-multi-etag-collision-2026-05-27-10-15-00.md deleted file mode 100644 index 92d4f21b256..00000000000 --- a/.chronus/changes/fix-python-multi-etag-collision-2026-05-27-10-15-00.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: fix -packages: - - "@typespec/http-client-python" ---- - -Fix `etag`/`match_condition` clientName collision when an operation has more than one `Azure.Core.eTag`-typed header (e.g. Storage's `copyFromUrl`, which has both `If-Match`/`If-None-Match` and `x-ms-source-if-match`/`x-ms-source-if-none-match`). The standard `If-Match`/`If-None-Match` pair is now preferred for the `etag`/`match_condition` slot, and any additional etag-typed headers retain their natural client name (e.g. `source_if_match`). diff --git a/.chronus/changes/fix-python-prerelease-version-stamping-2026-5-27-13-30-0.md b/.chronus/changes/fix-python-prerelease-version-stamping-2026-5-27-13-30-0.md deleted file mode 100644 index 5cb580941de..00000000000 --- a/.chronus/changes/fix-python-prerelease-version-stamping-2026-5-27-13-30-0.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: fix -packages: - - "@typespec/http-client-python" ---- - -Fix CI publish failures by stamping prerelease version in Build-Packages.ps1. The `-Prerelease` flag was accepted but unused, causing every CI build to produce the same version and fail with a 409 conflict on the DevOps feed. diff --git a/packages/http-client-python/CHANGELOG.md b/packages/http-client-python/CHANGELOG.md index f41ce48c70e..93c844a16a8 100644 --- a/packages/http-client-python/CHANGELOG.md +++ b/packages/http-client-python/CHANGELOG.md @@ -1,5 +1,14 @@ # Change Log - @typespec/http-client-python +## 0.30.1 + +### Bug Fixes + +- [#10843](https://github.com/microsoft/typespec/pull/10843) Synthesize filename in multipart Content-Disposition for bare file inputs. When callers pass bare bytes/str/IO instead of a (filename, content) tuple for multipart file fields, the `prepare_multipart_form_data` helper now wraps them with a synthesized filename so servers that require `filename=` in the Content-Disposition header no longer reject the upload. +- [#10816](https://github.com/microsoft/typespec/pull/10816) Fix `etag`/`match_condition` clientName collision when an operation has more than one `Azure.Core.eTag`-typed header (e.g. Storage's `copyFromUrl`, which has both `If-Match`/`If-None-Match` and `x-ms-source-if-match`/`x-ms-source-if-none-match`). The standard `If-Match`/`If-None-Match` pair is now preferred for the `etag`/`match_condition` slot, and any additional etag-typed headers retain their natural client name (e.g. `source_if_match`). +- [#10817](https://github.com/microsoft/typespec/pull/10817) Fix CI publish failures by stamping prerelease version in Build-Packages.ps1. The `-Prerelease` flag was accepted but unused, causing every CI build to produce the same version and fail with a 409 conflict on the DevOps feed. + + ## 0.30.0 ### Features diff --git a/packages/http-client-python/package.json b/packages/http-client-python/package.json index 312927acc9a..fd4f586d2c3 100644 --- a/packages/http-client-python/package.json +++ b/packages/http-client-python/package.json @@ -1,6 +1,6 @@ { "name": "@typespec/http-client-python", - "version": "0.30.0", + "version": "0.30.1", "author": "Microsoft Corporation", "description": "TypeSpec emitter for Python SDKs", "homepage": "https://typespec.io", From 93b94faaf11b7b67ccd8e2461f374b8a5b3310c6 Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Tue, 2 Jun 2026 16:18:22 -0400 Subject: [PATCH 2/3] remove an internal mention in changelog --- packages/http-client-python/CHANGELOG.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/http-client-python/CHANGELOG.md b/packages/http-client-python/CHANGELOG.md index 93c844a16a8..df47ea97033 100644 --- a/packages/http-client-python/CHANGELOG.md +++ b/packages/http-client-python/CHANGELOG.md @@ -6,8 +6,6 @@ - [#10843](https://github.com/microsoft/typespec/pull/10843) Synthesize filename in multipart Content-Disposition for bare file inputs. When callers pass bare bytes/str/IO instead of a (filename, content) tuple for multipart file fields, the `prepare_multipart_form_data` helper now wraps them with a synthesized filename so servers that require `filename=` in the Content-Disposition header no longer reject the upload. - [#10816](https://github.com/microsoft/typespec/pull/10816) Fix `etag`/`match_condition` clientName collision when an operation has more than one `Azure.Core.eTag`-typed header (e.g. Storage's `copyFromUrl`, which has both `If-Match`/`If-None-Match` and `x-ms-source-if-match`/`x-ms-source-if-none-match`). The standard `If-Match`/`If-None-Match` pair is now preferred for the `etag`/`match_condition` slot, and any additional etag-typed headers retain their natural client name (e.g. `source_if_match`). -- [#10817](https://github.com/microsoft/typespec/pull/10817) Fix CI publish failures by stamping prerelease version in Build-Packages.ps1. The `-Prerelease` flag was accepted but unused, causing every CI build to produce the same version and fail with a 409 conflict on the DevOps feed. - ## 0.30.0 From 9eeb12aa2f030566014f31af20cbe99e09b842ed Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Wed, 3 Jun 2026 13:48:59 -0400 Subject: [PATCH 3/3] fix: skip typeddict packages in README test These packages exist in the azure-sdk-for-python baseline but are not yet in regenerate.ts, so their READMEs get deleted during baseline reset and are never recreated. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../tests/mock_api/shared/unittests/test_readme.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/http-client-python/tests/mock_api/shared/unittests/test_readme.py b/packages/http-client-python/tests/mock_api/shared/unittests/test_readme.py index 133f680d9e7..4aa24a62964 100644 --- a/packages/http-client-python/tests/mock_api/shared/unittests/test_readme.py +++ b/packages/http-client-python/tests/mock_api/shared/unittests/test_readme.py @@ -16,6 +16,16 @@ SKIP_PACKAGES = { ("azure", "service-multiple-services"), ("azure", "azure-client-generator-core-client-initialization"), + # TypedDict test packages exist in the azure-sdk-for-python baseline but + # are not yet in regenerate.ts on main, so their READMEs are deleted during + # baseline reset and never recreated. + ("azure", "client-naming-typeddict"), + ("azure", "typetest-model-notdiscriminated-typeddict"), + ("azure", "typetest-model-singlediscriminator-typeddict"), + ("azure", "typetest-model-usage-typeddictonly"), + ("unbranded", "typetest-model-notdiscriminated-typeddict"), + ("unbranded", "typetest-model-singlediscriminator-typeddict"), + ("unbranded", "typetest-model-usage-typeddictonly"), }