From d1ff4534a930e11b12055629dbb98db7d4c63ad5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 25 Jun 2025 12:51:07 +0000 Subject: [PATCH 1/2] feat(api): /browsers no longer requires invocation id --- .stats.yml | 4 +-- README.md | 1 - src/kernel/resources/browsers.py | 4 +-- src/kernel/types/browser_create_params.py | 4 +-- tests/api_resources/test_browsers.py | 24 +++++------------ tests/test_client.py | 32 +++++++---------------- 6 files changed, 22 insertions(+), 47 deletions(-) diff --git a/.stats.yml b/.stats.yml index b296d07..60f163b 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 16 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-2aec229ccf91f7c1ac95aa675ea2a59bd61af9e363a22c3b49677992f1eeb16a.yml -openapi_spec_hash: c80cd5d52a79cd5366a76d4a825bd27a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-ff8ccba8b5409eaa1128df9027582cb63f66e8accd75e511f70b7c27ef26c9ae.yml +openapi_spec_hash: 1dbacc339695a7c78718f90f791d3f01 config_hash: b8e1fff080fbaa22656ab0a57b591777 diff --git a/README.md b/README.md index 00a4d1b..8ee8a72 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,6 @@ from kernel import Kernel client = Kernel() browser = client.browsers.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet", persistence={"id": "my-awesome-browser-for-user-1234"}, ) print(browser.persistence) diff --git a/src/kernel/resources/browsers.py b/src/kernel/resources/browsers.py index e3dc833..0cbe820 100644 --- a/src/kernel/resources/browsers.py +++ b/src/kernel/resources/browsers.py @@ -47,7 +47,7 @@ def with_streaming_response(self) -> BrowsersResourceWithStreamingResponse: def create( self, *, - invocation_id: str, + invocation_id: str | NotGiven = NOT_GIVEN, persistence: BrowserPersistenceParam | NotGiven = NOT_GIVEN, stealth: bool | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -240,7 +240,7 @@ def with_streaming_response(self) -> AsyncBrowsersResourceWithStreamingResponse: async def create( self, *, - invocation_id: str, + invocation_id: str | NotGiven = NOT_GIVEN, persistence: BrowserPersistenceParam | NotGiven = NOT_GIVEN, stealth: bool | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. diff --git a/src/kernel/types/browser_create_params.py b/src/kernel/types/browser_create_params.py index e50aefb..2153abf 100644 --- a/src/kernel/types/browser_create_params.py +++ b/src/kernel/types/browser_create_params.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing_extensions import Required, TypedDict +from typing_extensions import TypedDict from .browser_persistence_param import BrowserPersistenceParam @@ -10,7 +10,7 @@ class BrowserCreateParams(TypedDict, total=False): - invocation_id: Required[str] + invocation_id: str """action invocation ID""" persistence: BrowserPersistenceParam diff --git a/tests/api_resources/test_browsers.py b/tests/api_resources/test_browsers.py index 91a9429..f4111fa 100644 --- a/tests/api_resources/test_browsers.py +++ b/tests/api_resources/test_browsers.py @@ -24,9 +24,7 @@ class TestBrowsers: @pytest.mark.skip() @parametrize def test_method_create(self, client: Kernel) -> None: - browser = client.browsers.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet", - ) + browser = client.browsers.create() assert_matches_type(BrowserCreateResponse, browser, path=["response"]) @pytest.mark.skip() @@ -42,9 +40,7 @@ def test_method_create_with_all_params(self, client: Kernel) -> None: @pytest.mark.skip() @parametrize def test_raw_response_create(self, client: Kernel) -> None: - response = client.browsers.with_raw_response.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet", - ) + response = client.browsers.with_raw_response.create() assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -54,9 +50,7 @@ def test_raw_response_create(self, client: Kernel) -> None: @pytest.mark.skip() @parametrize def test_streaming_response_create(self, client: Kernel) -> None: - with client.browsers.with_streaming_response.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet", - ) as response: + with client.browsers.with_streaming_response.create() as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -220,9 +214,7 @@ class TestAsyncBrowsers: @pytest.mark.skip() @parametrize async def test_method_create(self, async_client: AsyncKernel) -> None: - browser = await async_client.browsers.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet", - ) + browser = await async_client.browsers.create() assert_matches_type(BrowserCreateResponse, browser, path=["response"]) @pytest.mark.skip() @@ -238,9 +230,7 @@ async def test_method_create_with_all_params(self, async_client: AsyncKernel) -> @pytest.mark.skip() @parametrize async def test_raw_response_create(self, async_client: AsyncKernel) -> None: - response = await async_client.browsers.with_raw_response.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet", - ) + response = await async_client.browsers.with_raw_response.create() assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -250,9 +240,7 @@ async def test_raw_response_create(self, async_client: AsyncKernel) -> None: @pytest.mark.skip() @parametrize async def test_streaming_response_create(self, async_client: AsyncKernel) -> None: - async with async_client.browsers.with_streaming_response.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet", - ) as response: + async with async_client.browsers.with_streaming_response.create() as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" diff --git a/tests/test_client.py b/tests/test_client.py index 301dd58..05267fd 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -724,7 +724,7 @@ def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter, clien respx_mock.post("/browsers").mock(side_effect=httpx.TimeoutException("Test timeout error")) with pytest.raises(APITimeoutError): - client.browsers.with_streaming_response.create(invocation_id="rr33xuugxj9h0bkf1rdt2bet").__enter__() + client.browsers.with_streaming_response.create().__enter__() assert _get_open_connections(self.client) == 0 @@ -735,7 +735,7 @@ def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter, client respx_mock.post("/browsers").mock(return_value=httpx.Response(500)) with pytest.raises(APIStatusError): - client.browsers.with_streaming_response.create(invocation_id="rr33xuugxj9h0bkf1rdt2bet").__enter__() + client.browsers.with_streaming_response.create().__enter__() assert _get_open_connections(self.client) == 0 @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) @@ -764,7 +764,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: respx_mock.post("/browsers").mock(side_effect=retry_handler) - response = client.browsers.with_raw_response.create(invocation_id="rr33xuugxj9h0bkf1rdt2bet") + response = client.browsers.with_raw_response.create() assert response.retries_taken == failures_before_success assert int(response.http_request.headers.get("x-stainless-retry-count")) == failures_before_success @@ -788,9 +788,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: respx_mock.post("/browsers").mock(side_effect=retry_handler) - response = client.browsers.with_raw_response.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet", extra_headers={"x-stainless-retry-count": Omit()} - ) + response = client.browsers.with_raw_response.create(extra_headers={"x-stainless-retry-count": Omit()}) assert len(response.http_request.headers.get_list("x-stainless-retry-count")) == 0 @@ -813,9 +811,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: respx_mock.post("/browsers").mock(side_effect=retry_handler) - response = client.browsers.with_raw_response.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet", extra_headers={"x-stainless-retry-count": "42"} - ) + response = client.browsers.with_raw_response.create(extra_headers={"x-stainless-retry-count": "42"}) assert response.http_request.headers.get("x-stainless-retry-count") == "42" @@ -1555,9 +1551,7 @@ async def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter, respx_mock.post("/browsers").mock(side_effect=httpx.TimeoutException("Test timeout error")) with pytest.raises(APITimeoutError): - await async_client.browsers.with_streaming_response.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet" - ).__aenter__() + await async_client.browsers.with_streaming_response.create().__aenter__() assert _get_open_connections(self.client) == 0 @@ -1568,9 +1562,7 @@ async def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter, respx_mock.post("/browsers").mock(return_value=httpx.Response(500)) with pytest.raises(APIStatusError): - await async_client.browsers.with_streaming_response.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet" - ).__aenter__() + await async_client.browsers.with_streaming_response.create().__aenter__() assert _get_open_connections(self.client) == 0 @pytest.mark.parametrize("failures_before_success", [0, 2, 4]) @@ -1600,7 +1592,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: respx_mock.post("/browsers").mock(side_effect=retry_handler) - response = await client.browsers.with_raw_response.create(invocation_id="rr33xuugxj9h0bkf1rdt2bet") + response = await client.browsers.with_raw_response.create() assert response.retries_taken == failures_before_success assert int(response.http_request.headers.get("x-stainless-retry-count")) == failures_before_success @@ -1625,9 +1617,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: respx_mock.post("/browsers").mock(side_effect=retry_handler) - response = await client.browsers.with_raw_response.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet", extra_headers={"x-stainless-retry-count": Omit()} - ) + response = await client.browsers.with_raw_response.create(extra_headers={"x-stainless-retry-count": Omit()}) assert len(response.http_request.headers.get_list("x-stainless-retry-count")) == 0 @@ -1651,9 +1641,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response: respx_mock.post("/browsers").mock(side_effect=retry_handler) - response = await client.browsers.with_raw_response.create( - invocation_id="rr33xuugxj9h0bkf1rdt2bet", extra_headers={"x-stainless-retry-count": "42"} - ) + response = await client.browsers.with_raw_response.create(extra_headers={"x-stainless-retry-count": "42"}) assert response.http_request.headers.get("x-stainless-retry-count") == "42" From a2cb9dd6223a112eebcaa49afaadee671b1648ae Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 25 Jun 2025 12:53:02 +0000 Subject: [PATCH 2/2] release: 0.6.3 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ pyproject.toml | 2 +- src/kernel/_version.py | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index e3778b2..5c87ad8 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.6.2" + ".": "0.6.3" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index b6b7e52..2cf0804 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.6.3 (2025-06-25) + +Full Changelog: [v0.6.2...v0.6.3](https://github.com/onkernel/kernel-python-sdk/compare/v0.6.2...v0.6.3) + +### Features + +* **api:** /browsers no longer requires invocation id ([d1ff453](https://github.com/onkernel/kernel-python-sdk/commit/d1ff4534a930e11b12055629dbb98db7d4c63ad5)) + ## 0.6.2 (2025-06-24) Full Changelog: [v0.6.1...v0.6.2](https://github.com/onkernel/kernel-python-sdk/compare/v0.6.1...v0.6.2) diff --git a/pyproject.toml b/pyproject.toml index e5375bc..cec894e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "kernel" -version = "0.6.2" +version = "0.6.3" description = "The official Python library for the kernel API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/kernel/_version.py b/src/kernel/_version.py index f175528..8903bb2 100644 --- a/src/kernel/_version.py +++ b/src/kernel/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "kernel" -__version__ = "0.6.2" # x-release-please-version +__version__ = "0.6.3" # x-release-please-version