diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 59acac4..8935e93 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.27.0" + ".": "0.28.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 50043a4..bcbec15 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 97 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-7427d4bcaba5cad07910da7a222bdd2650b5280e6b889132ed38d230adafb8a5.yml -openapi_spec_hash: e8e3dc1ae54666d544d1fc848b25e7cf +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-d430a8e3407ceb608d912cabadbcb016b4fcf057ca56b3bbd179ea3b3121b484.yml +openapi_spec_hash: 8adbf013baf77abacaf04ed067749397 config_hash: b470456b217bb9502f5212311d395a6f diff --git a/CHANGELOG.md b/CHANGELOG.md index 950e91e..1b162d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.28.0 (2026-01-22) + +Full Changelog: [v0.27.0...v0.28.0](https://github.com/kernel/kernel-python-sdk/compare/v0.27.0...v0.28.0) + +### Features + +* Allow hot loading profiles into sessions ([34b8809](https://github.com/kernel/kernel-python-sdk/commit/34b880972dcf2820eff77b32f739b4e621781a44)) + ## 0.27.0 (2026-01-21) Full Changelog: [v0.26.0...v0.27.0](https://github.com/kernel/kernel-python-sdk/compare/v0.26.0...v0.27.0) diff --git a/pyproject.toml b/pyproject.toml index 7ac03dc..4402e48 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "kernel" -version = "0.27.0" +version = "0.28.0" 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 b962ca5..f78bed9 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.27.0" # x-release-please-version +__version__ = "0.28.0" # x-release-please-version diff --git a/src/kernel/resources/browsers/browsers.py b/src/kernel/resources/browsers/browsers.py index d835f7a..534ae06 100644 --- a/src/kernel/resources/browsers/browsers.py +++ b/src/kernel/resources/browsers/browsers.py @@ -270,7 +270,9 @@ def update( self, id: str, *, + profile: BrowserProfile | Omit = omit, proxy_id: Optional[str] | Omit = omit, + viewport: BrowserViewport | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -278,14 +280,18 @@ def update( extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> BrowserUpdateResponse: - """Update a browser session. + """ + Update a browser session. Args: - proxy_id: ID of the proxy to use. + profile: Profile to load into the browser session. Only allowed if the session does not + already have a profile loaded. - Omit to leave unchanged, set to empty string to remove + proxy_id: ID of the proxy to use. Omit to leave unchanged, set to empty string to remove proxy. + viewport: Viewport configuration to apply to the browser session. + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -298,7 +304,14 @@ def update( raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") return self._patch( f"/browsers/{id}", - body=maybe_transform({"proxy_id": proxy_id}, browser_update_params.BrowserUpdateParams), + body=maybe_transform( + { + "profile": profile, + "proxy_id": proxy_id, + "viewport": viewport, + }, + browser_update_params.BrowserUpdateParams, + ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), @@ -668,7 +681,9 @@ async def update( self, id: str, *, + profile: BrowserProfile | Omit = omit, proxy_id: Optional[str] | Omit = omit, + viewport: BrowserViewport | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -676,14 +691,18 @@ async def update( extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> BrowserUpdateResponse: - """Update a browser session. + """ + Update a browser session. Args: - proxy_id: ID of the proxy to use. + profile: Profile to load into the browser session. Only allowed if the session does not + already have a profile loaded. - Omit to leave unchanged, set to empty string to remove + proxy_id: ID of the proxy to use. Omit to leave unchanged, set to empty string to remove proxy. + viewport: Viewport configuration to apply to the browser session. + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -696,7 +715,14 @@ async def update( raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") return await self._patch( f"/browsers/{id}", - body=await async_maybe_transform({"proxy_id": proxy_id}, browser_update_params.BrowserUpdateParams), + body=await async_maybe_transform( + { + "profile": profile, + "proxy_id": proxy_id, + "viewport": viewport, + }, + browser_update_params.BrowserUpdateParams, + ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), diff --git a/src/kernel/types/browser_update_params.py b/src/kernel/types/browser_update_params.py index 72e0287..917cd7d 100644 --- a/src/kernel/types/browser_update_params.py +++ b/src/kernel/types/browser_update_params.py @@ -5,12 +5,24 @@ from typing import Optional from typing_extensions import TypedDict +from .shared_params.browser_profile import BrowserProfile +from .shared_params.browser_viewport import BrowserViewport + __all__ = ["BrowserUpdateParams"] class BrowserUpdateParams(TypedDict, total=False): + profile: BrowserProfile + """Profile to load into the browser session. + + Only allowed if the session does not already have a profile loaded. + """ + proxy_id: Optional[str] """ID of the proxy to use. Omit to leave unchanged, set to empty string to remove proxy. """ + + viewport: BrowserViewport + """Viewport configuration to apply to the browser session.""" diff --git a/tests/api_resources/test_browsers.py b/tests/api_resources/test_browsers.py index 139cf14..914b5af 100644 --- a/tests/api_resources/test_browsers.py +++ b/tests/api_resources/test_browsers.py @@ -147,7 +147,17 @@ def test_method_update(self, client: Kernel) -> None: def test_method_update_with_all_params(self, client: Kernel) -> None: browser = client.browsers.update( id="htzv5orfit78e1m2biiifpbv", + profile={ + "id": "id", + "name": "name", + "save_changes": True, + }, proxy_id="proxy_id", + viewport={ + "height": 800, + "width": 1280, + "refresh_rate": 60, + }, ) assert_matches_type(BrowserUpdateResponse, browser, path=["response"]) @@ -498,7 +508,17 @@ async def test_method_update(self, async_client: AsyncKernel) -> None: async def test_method_update_with_all_params(self, async_client: AsyncKernel) -> None: browser = await async_client.browsers.update( id="htzv5orfit78e1m2biiifpbv", + profile={ + "id": "id", + "name": "name", + "save_changes": True, + }, proxy_id="proxy_id", + viewport={ + "height": 800, + "width": 1280, + "refresh_rate": 60, + }, ) assert_matches_type(BrowserUpdateResponse, browser, path=["response"])