diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ff85815..71a7a376 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,13 +1,12 @@ name: CI on: push: - branches-ignore: - - 'generated' - - 'codegen/**' - - 'integrated/**' - - 'preview-head/**' - - 'preview-base/**' - - 'preview/**' + branches: + - main + pull_request: + branches: + - main + - next jobs: lint: diff --git a/.release-please-manifest.json b/.release-please-manifest.json index f2863752..9436ab48 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.90.0" + ".": "0.90.1" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b86f92e..7eb87ff5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## 0.90.1 (2025-04-11) + +Full Changelog: [v0.90.0...v0.90.1](https://github.com/lithic-com/lithic-python/compare/v0.90.0...v0.90.1) + +### Bug Fixes + +* **perf:** skip traversing types for NotGiven values ([5c6a919](https://github.com/lithic-com/lithic-python/commit/5c6a9196fab4c1cfcfdc64689088570df57c2245)) + + +### Chores + +* **internal:** reduce CI branch coverage ([cf29bc0](https://github.com/lithic-com/lithic-python/commit/cf29bc098038e00d1a332b156cc1b192e0b1cad1)) + ## 0.90.0 (2025-04-09) Full Changelog: [v0.89.0...v0.90.0](https://github.com/lithic-com/lithic-python/compare/v0.89.0...v0.90.0) diff --git a/pyproject.toml b/pyproject.toml index 7318e109..57649815 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "lithic" -version = "0.90.0" +version = "0.90.1" description = "The official Python library for the lithic API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/lithic/_utils/_transform.py b/src/lithic/_utils/_transform.py index 3ec62081..3b2b8e00 100644 --- a/src/lithic/_utils/_transform.py +++ b/src/lithic/_utils/_transform.py @@ -12,6 +12,7 @@ from ._utils import ( is_list, + is_given, is_mapping, is_iterable, ) @@ -258,6 +259,11 @@ def _transform_typeddict( result: dict[str, object] = {} annotations = get_type_hints(expected_type, include_extras=True) for key, value in data.items(): + if not is_given(value): + # we don't need to include `NotGiven` values here as they'll + # be stripped out before the request is sent anyway + continue + type_ = annotations.get(key) if type_ is None: # we do not have a type annotation for this field, leave it as is @@ -415,6 +421,11 @@ async def _async_transform_typeddict( result: dict[str, object] = {} annotations = get_type_hints(expected_type, include_extras=True) for key, value in data.items(): + if not is_given(value): + # we don't need to include `NotGiven` values here as they'll + # be stripped out before the request is sent anyway + continue + type_ = annotations.get(key) if type_ is None: # we do not have a type annotation for this field, leave it as is diff --git a/src/lithic/_version.py b/src/lithic/_version.py index 059797fb..e6e591b2 100644 --- a/src/lithic/_version.py +++ b/src/lithic/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "lithic" -__version__ = "0.90.0" # x-release-please-version +__version__ = "0.90.1" # x-release-please-version diff --git a/tests/test_transform.py b/tests/test_transform.py index 7ce3274b..c5113270 100644 --- a/tests/test_transform.py +++ b/tests/test_transform.py @@ -8,7 +8,7 @@ import pytest -from lithic._types import Base64FileInput +from lithic._types import NOT_GIVEN, Base64FileInput from lithic._utils import ( PropertyInfo, transform as _transform, @@ -444,3 +444,10 @@ async def test_transform_skipping(use_async: bool) -> None: # iterables of ints are converted to a list data = iter([1, 2, 3]) assert await transform(data, Iterable[int], use_async) == [1, 2, 3] + + +@parametrize +@pytest.mark.asyncio +async def test_strips_notgiven(use_async: bool) -> None: + assert await transform({"foo_bar": "bar"}, Foo1, use_async) == {"fooBar": "bar"} + assert await transform({"foo_bar": NOT_GIVEN}, Foo1, use_async) == {}