From 68c2cc821cf9c31f8e5e054ba69780cbba2449db Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 12 May 2025 18:48:36 +0000
Subject: [PATCH 1/2] feat(api): update via SDK Studio
---
.stats.yml | 4 +-
README.md | 15 +----
api.md | 2 +-
src/kernel/resources/apps.py | 45 +++++++++------
src/kernel/resources/browser.py | 40 ++++++++++++-
src/kernel/types/__init__.py | 1 +
src/kernel/types/app_deploy_params.py | 21 ++++---
src/kernel/types/app_deploy_response.py | 22 +++++++-
.../types/browser_create_session_params.py | 14 +++++
tests/api_resources/test_apps.py | 34 ++++-------
tests/api_resources/test_browser.py | 24 ++++++--
tests/test_client.py | 56 ++++---------------
12 files changed, 157 insertions(+), 121 deletions(-)
create mode 100644 src/kernel/types/browser_create_session_params.py
diff --git a/.stats.yml b/.stats.yml
index 6af3fb9..cbc2ff8 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 4
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-d168b58fcf39dbd0458d132091793d3e2d0930070b7dda2d5f7f1baff20dd31b.yml
-openapi_spec_hash: b7e0fd7ee1656d7dbad57209d1584d92
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-2af763aab4c314b382e1123edc4ee3d51c0fe7977730ce6776b9fb09b29fe291.yml
+openapi_spec_hash: be02256478be81fa3f649076879850bc
config_hash: eab40627b734534462ae3b8ccd8b263b
diff --git a/README.md b/README.md
index ab4e765..1cbfb1f 100644
--- a/README.md
+++ b/README.md
@@ -34,11 +34,10 @@ client = Kernel(
)
response = client.apps.deploy(
- app_name="REPLACE_ME",
file=b"REPLACE_ME",
version="REPLACE_ME",
)
-print(response.id)
+print(response.apps)
```
While you can provide an `api_key` keyword argument,
@@ -64,11 +63,10 @@ client = AsyncKernel(
async def main() -> None:
response = await client.apps.deploy(
- app_name="REPLACE_ME",
file=b"REPLACE_ME",
version="REPLACE_ME",
)
- print(response.id)
+ print(response.apps)
asyncio.run(main())
@@ -96,9 +94,7 @@ from kernel import Kernel
client = Kernel()
client.apps.deploy(
- app_name="my-awesome-app",
file=Path("/path/to/file"),
- version="1.0.0",
)
```
@@ -121,7 +117,6 @@ client = Kernel()
try:
client.apps.deploy(
- app_name="REPLACE_ME",
file=b"REPLACE_ME",
version="REPLACE_ME",
)
@@ -168,7 +163,6 @@ client = Kernel(
# Or, configure per-request:
client.with_options(max_retries=5).apps.deploy(
- app_name="REPLACE_ME",
file=b"REPLACE_ME",
version="REPLACE_ME",
)
@@ -195,7 +189,6 @@ client = Kernel(
# Override per-request:
client.with_options(timeout=5.0).apps.deploy(
- app_name="REPLACE_ME",
file=b"REPLACE_ME",
version="REPLACE_ME",
)
@@ -240,14 +233,13 @@ from kernel import Kernel
client = Kernel()
response = client.apps.with_raw_response.deploy(
- app_name="REPLACE_ME",
file=b"REPLACE_ME",
version="REPLACE_ME",
)
print(response.headers.get('X-My-Header'))
app = response.parse() # get the object that `apps.deploy()` would have returned
-print(app.id)
+print(app.apps)
```
These methods return an [`APIResponse`](https://github.com/onkernel/kernel-python-sdk/tree/main/src/kernel/_response.py) object.
@@ -262,7 +254,6 @@ To stream the response body, use `.with_streaming_response` instead, which requi
```python
with client.apps.with_streaming_response.deploy(
- app_name="REPLACE_ME",
file=b"REPLACE_ME",
version="REPLACE_ME",
) as response:
diff --git a/api.md b/api.md
index ec9b481..581c76f 100644
--- a/api.md
+++ b/api.md
@@ -22,4 +22,4 @@ from kernel.types import BrowserCreateSessionResponse
Methods:
-- client.browser.create_session() -> BrowserCreateSessionResponse
+- client.browser.create_session(\*\*params) -> BrowserCreateSessionResponse
diff --git a/src/kernel/resources/apps.py b/src/kernel/resources/apps.py
index 997a27f..4514880 100644
--- a/src/kernel/resources/apps.py
+++ b/src/kernel/resources/apps.py
@@ -3,6 +3,7 @@
from __future__ import annotations
from typing import Mapping, cast
+from typing_extensions import Literal
import httpx
@@ -48,10 +49,11 @@ def with_streaming_response(self) -> AppsResourceWithStreamingResponse:
def deploy(
self,
*,
- app_name: str,
file: FileTypes,
- version: str,
- region: str | NotGiven = NOT_GIVEN,
+ entrypoint_rel_path: str | NotGiven = NOT_GIVEN,
+ force: Literal["true", "false"] | NotGiven = NOT_GIVEN,
+ region: Literal["aws.us-east-1a"] | NotGiven = NOT_GIVEN,
+ version: str | NotGiven = NOT_GIVEN,
# 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,
@@ -63,13 +65,15 @@ def deploy(
Deploy a new application
Args:
- app_name: Name of the application
+ file: ZIP file containing the application source directory
- file: ZIP file containing the application
+ entrypoint_rel_path: Relative path to the entrypoint of the application
- version: Version of the application
+ force: Allow overwriting an existing app version
- region: AWS region for deployment (e.g. "aws.us-east-1a")
+ region: Region for deployment. Currently we only support "aws.us-east-1a"
+
+ version: Version of the application. Can be any string.
extra_headers: Send extra headers
@@ -81,10 +85,11 @@ def deploy(
"""
body = deepcopy_minimal(
{
- "app_name": app_name,
"file": file,
- "version": version,
+ "entrypoint_rel_path": entrypoint_rel_path,
+ "force": force,
"region": region,
+ "version": version,
}
)
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
@@ -210,10 +215,11 @@ def with_streaming_response(self) -> AsyncAppsResourceWithStreamingResponse:
async def deploy(
self,
*,
- app_name: str,
file: FileTypes,
- version: str,
- region: str | NotGiven = NOT_GIVEN,
+ entrypoint_rel_path: str | NotGiven = NOT_GIVEN,
+ force: Literal["true", "false"] | NotGiven = NOT_GIVEN,
+ region: Literal["aws.us-east-1a"] | NotGiven = NOT_GIVEN,
+ version: str | NotGiven = NOT_GIVEN,
# 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,
@@ -225,13 +231,15 @@ async def deploy(
Deploy a new application
Args:
- app_name: Name of the application
+ file: ZIP file containing the application source directory
- file: ZIP file containing the application
+ entrypoint_rel_path: Relative path to the entrypoint of the application
- version: Version of the application
+ force: Allow overwriting an existing app version
- region: AWS region for deployment (e.g. "aws.us-east-1a")
+ region: Region for deployment. Currently we only support "aws.us-east-1a"
+
+ version: Version of the application. Can be any string.
extra_headers: Send extra headers
@@ -243,10 +251,11 @@ async def deploy(
"""
body = deepcopy_minimal(
{
- "app_name": app_name,
"file": file,
- "version": version,
+ "entrypoint_rel_path": entrypoint_rel_path,
+ "force": force,
"region": region,
+ "version": version,
}
)
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
diff --git a/src/kernel/resources/browser.py b/src/kernel/resources/browser.py
index 3e3da66..3edf8c0 100644
--- a/src/kernel/resources/browser.py
+++ b/src/kernel/resources/browser.py
@@ -4,7 +4,9 @@
import httpx
+from ..types import browser_create_session_params
from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven
+from .._utils import maybe_transform, async_maybe_transform
from .._compat import cached_property
from .._resource import SyncAPIResource, AsyncAPIResource
from .._response import (
@@ -42,6 +44,7 @@ def with_streaming_response(self) -> BrowserResourceWithStreamingResponse:
def create_session(
self,
*,
+ invocation_id: str,
# 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,
@@ -49,9 +52,25 @@ def create_session(
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> BrowserCreateSessionResponse:
- """Create Browser Session"""
+ """
+ Create Browser Session
+
+ Args:
+ invocation_id: Kernel App invocation ID
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
return self._post(
"/browser",
+ body=maybe_transform(
+ {"invocation_id": invocation_id}, browser_create_session_params.BrowserCreateSessionParams
+ ),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
@@ -82,6 +101,7 @@ def with_streaming_response(self) -> AsyncBrowserResourceWithStreamingResponse:
async def create_session(
self,
*,
+ invocation_id: str,
# 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,
@@ -89,9 +109,25 @@ async def create_session(
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> BrowserCreateSessionResponse:
- """Create Browser Session"""
+ """
+ Create Browser Session
+
+ Args:
+ invocation_id: Kernel App invocation ID
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
return await self._post(
"/browser",
+ body=await async_maybe_transform(
+ {"invocation_id": invocation_id}, browser_create_session_params.BrowserCreateSessionParams
+ ),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
diff --git a/src/kernel/types/__init__.py b/src/kernel/types/__init__.py
index 9577c2f..32a4768 100644
--- a/src/kernel/types/__init__.py
+++ b/src/kernel/types/__init__.py
@@ -6,5 +6,6 @@
from .app_invoke_params import AppInvokeParams as AppInvokeParams
from .app_deploy_response import AppDeployResponse as AppDeployResponse
from .app_invoke_response import AppInvokeResponse as AppInvokeResponse
+from .browser_create_session_params import BrowserCreateSessionParams as BrowserCreateSessionParams
from .browser_create_session_response import BrowserCreateSessionResponse as BrowserCreateSessionResponse
from .app_retrieve_invocation_response import AppRetrieveInvocationResponse as AppRetrieveInvocationResponse
diff --git a/src/kernel/types/app_deploy_params.py b/src/kernel/types/app_deploy_params.py
index 78a11f2..ff7242c 100644
--- a/src/kernel/types/app_deploy_params.py
+++ b/src/kernel/types/app_deploy_params.py
@@ -2,7 +2,7 @@
from __future__ import annotations
-from typing_extensions import Required, Annotated, TypedDict
+from typing_extensions import Literal, Required, Annotated, TypedDict
from .._types import FileTypes
from .._utils import PropertyInfo
@@ -11,14 +11,17 @@
class AppDeployParams(TypedDict, total=False):
- app_name: Required[Annotated[str, PropertyInfo(alias="appName")]]
- """Name of the application"""
-
file: Required[FileTypes]
- """ZIP file containing the application"""
+ """ZIP file containing the application source directory"""
+
+ entrypoint_rel_path: Annotated[str, PropertyInfo(alias="entrypointRelPath")]
+ """Relative path to the entrypoint of the application"""
+
+ force: Literal["true", "false"]
+ """Allow overwriting an existing app version"""
- version: Required[str]
- """Version of the application"""
+ region: Literal["aws.us-east-1a"]
+ """Region for deployment. Currently we only support "aws.us-east-1a" """
- region: str
- """AWS region for deployment (e.g. "aws.us-east-1a")"""
+ version: str
+ """Version of the application. Can be any string."""
diff --git a/src/kernel/types/app_deploy_response.py b/src/kernel/types/app_deploy_response.py
index 6a214df..e82164e 100644
--- a/src/kernel/types/app_deploy_response.py
+++ b/src/kernel/types/app_deploy_response.py
@@ -1,13 +1,29 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+from typing import List
+
from .._models import BaseModel
-__all__ = ["AppDeployResponse"]
+__all__ = ["AppDeployResponse", "App", "AppAction"]
-class AppDeployResponse(BaseModel):
+class AppAction(BaseModel):
+ name: str
+ """Name of the action"""
+
+
+class App(BaseModel):
id: str
- """ID of the deployed app version"""
+ """ID for the app version deployed"""
+
+ actions: List[AppAction]
+
+ name: str
+ """Name of the app"""
+
+
+class AppDeployResponse(BaseModel):
+ apps: List[App]
message: str
"""Success message"""
diff --git a/src/kernel/types/browser_create_session_params.py b/src/kernel/types/browser_create_session_params.py
new file mode 100644
index 0000000..73389be
--- /dev/null
+++ b/src/kernel/types/browser_create_session_params.py
@@ -0,0 +1,14 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing_extensions import Required, Annotated, TypedDict
+
+from .._utils import PropertyInfo
+
+__all__ = ["BrowserCreateSessionParams"]
+
+
+class BrowserCreateSessionParams(TypedDict, total=False):
+ invocation_id: Required[Annotated[str, PropertyInfo(alias="invocationId")]]
+ """Kernel App invocation ID"""
diff --git a/tests/api_resources/test_apps.py b/tests/api_resources/test_apps.py
index 26d0ef1..08efe17 100644
--- a/tests/api_resources/test_apps.py
+++ b/tests/api_resources/test_apps.py
@@ -25,9 +25,7 @@ class TestApps:
@parametrize
def test_method_deploy(self, client: Kernel) -> None:
app = client.apps.deploy(
- app_name="my-awesome-app",
file=b"raw file contents",
- version="1.0.0",
)
assert_matches_type(AppDeployResponse, app, path=["response"])
@@ -35,10 +33,11 @@ def test_method_deploy(self, client: Kernel) -> None:
@parametrize
def test_method_deploy_with_all_params(self, client: Kernel) -> None:
app = client.apps.deploy(
- app_name="my-awesome-app",
file=b"raw file contents",
- version="1.0.0",
+ entrypoint_rel_path="app.py",
+ force="false",
region="aws.us-east-1a",
+ version="1.0.0",
)
assert_matches_type(AppDeployResponse, app, path=["response"])
@@ -46,9 +45,7 @@ def test_method_deploy_with_all_params(self, client: Kernel) -> None:
@parametrize
def test_raw_response_deploy(self, client: Kernel) -> None:
response = client.apps.with_raw_response.deploy(
- app_name="my-awesome-app",
file=b"raw file contents",
- version="1.0.0",
)
assert response.is_closed is True
@@ -60,9 +57,7 @@ def test_raw_response_deploy(self, client: Kernel) -> None:
@parametrize
def test_streaming_response_deploy(self, client: Kernel) -> None:
with client.apps.with_streaming_response.deploy(
- app_name="my-awesome-app",
file=b"raw file contents",
- version="1.0.0",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -78,7 +73,7 @@ def test_method_invoke(self, client: Kernel) -> None:
app = client.apps.invoke(
action_name="analyze",
app_name="my-awesome-app",
- payload='{ "data": "example input" }',
+ payload={"data": "example input"},
version="1.0.0",
)
assert_matches_type(AppInvokeResponse, app, path=["response"])
@@ -89,7 +84,7 @@ def test_raw_response_invoke(self, client: Kernel) -> None:
response = client.apps.with_raw_response.invoke(
action_name="analyze",
app_name="my-awesome-app",
- payload='{ "data": "example input" }',
+ payload={"data": "example input"},
version="1.0.0",
)
@@ -104,7 +99,7 @@ def test_streaming_response_invoke(self, client: Kernel) -> None:
with client.apps.with_streaming_response.invoke(
action_name="analyze",
app_name="my-awesome-app",
- payload='{ "data": "example input" }',
+ payload={"data": "example input"},
version="1.0.0",
) as response:
assert not response.is_closed
@@ -165,9 +160,7 @@ class TestAsyncApps:
@parametrize
async def test_method_deploy(self, async_client: AsyncKernel) -> None:
app = await async_client.apps.deploy(
- app_name="my-awesome-app",
file=b"raw file contents",
- version="1.0.0",
)
assert_matches_type(AppDeployResponse, app, path=["response"])
@@ -175,10 +168,11 @@ async def test_method_deploy(self, async_client: AsyncKernel) -> None:
@parametrize
async def test_method_deploy_with_all_params(self, async_client: AsyncKernel) -> None:
app = await async_client.apps.deploy(
- app_name="my-awesome-app",
file=b"raw file contents",
- version="1.0.0",
+ entrypoint_rel_path="app.py",
+ force="false",
region="aws.us-east-1a",
+ version="1.0.0",
)
assert_matches_type(AppDeployResponse, app, path=["response"])
@@ -186,9 +180,7 @@ async def test_method_deploy_with_all_params(self, async_client: AsyncKernel) ->
@parametrize
async def test_raw_response_deploy(self, async_client: AsyncKernel) -> None:
response = await async_client.apps.with_raw_response.deploy(
- app_name="my-awesome-app",
file=b"raw file contents",
- version="1.0.0",
)
assert response.is_closed is True
@@ -200,9 +192,7 @@ async def test_raw_response_deploy(self, async_client: AsyncKernel) -> None:
@parametrize
async def test_streaming_response_deploy(self, async_client: AsyncKernel) -> None:
async with async_client.apps.with_streaming_response.deploy(
- app_name="my-awesome-app",
file=b"raw file contents",
- version="1.0.0",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -218,7 +208,7 @@ async def test_method_invoke(self, async_client: AsyncKernel) -> None:
app = await async_client.apps.invoke(
action_name="analyze",
app_name="my-awesome-app",
- payload='{ "data": "example input" }',
+ payload={"data": "example input"},
version="1.0.0",
)
assert_matches_type(AppInvokeResponse, app, path=["response"])
@@ -229,7 +219,7 @@ async def test_raw_response_invoke(self, async_client: AsyncKernel) -> None:
response = await async_client.apps.with_raw_response.invoke(
action_name="analyze",
app_name="my-awesome-app",
- payload='{ "data": "example input" }',
+ payload={"data": "example input"},
version="1.0.0",
)
@@ -244,7 +234,7 @@ async def test_streaming_response_invoke(self, async_client: AsyncKernel) -> Non
async with async_client.apps.with_streaming_response.invoke(
action_name="analyze",
app_name="my-awesome-app",
- payload='{ "data": "example input" }',
+ payload={"data": "example input"},
version="1.0.0",
) as response:
assert not response.is_closed
diff --git a/tests/api_resources/test_browser.py b/tests/api_resources/test_browser.py
index 1aa4a1c..3280e05 100644
--- a/tests/api_resources/test_browser.py
+++ b/tests/api_resources/test_browser.py
@@ -20,13 +20,17 @@ class TestBrowser:
@pytest.mark.skip()
@parametrize
def test_method_create_session(self, client: Kernel) -> None:
- browser = client.browser.create_session()
+ browser = client.browser.create_session(
+ invocation_id="invocationId",
+ )
assert_matches_type(BrowserCreateSessionResponse, browser, path=["response"])
@pytest.mark.skip()
@parametrize
def test_raw_response_create_session(self, client: Kernel) -> None:
- response = client.browser.with_raw_response.create_session()
+ response = client.browser.with_raw_response.create_session(
+ invocation_id="invocationId",
+ )
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -36,7 +40,9 @@ def test_raw_response_create_session(self, client: Kernel) -> None:
@pytest.mark.skip()
@parametrize
def test_streaming_response_create_session(self, client: Kernel) -> None:
- with client.browser.with_streaming_response.create_session() as response:
+ with client.browser.with_streaming_response.create_session(
+ invocation_id="invocationId",
+ ) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -52,13 +58,17 @@ class TestAsyncBrowser:
@pytest.mark.skip()
@parametrize
async def test_method_create_session(self, async_client: AsyncKernel) -> None:
- browser = await async_client.browser.create_session()
+ browser = await async_client.browser.create_session(
+ invocation_id="invocationId",
+ )
assert_matches_type(BrowserCreateSessionResponse, browser, path=["response"])
@pytest.mark.skip()
@parametrize
async def test_raw_response_create_session(self, async_client: AsyncKernel) -> None:
- response = await async_client.browser.with_raw_response.create_session()
+ response = await async_client.browser.with_raw_response.create_session(
+ invocation_id="invocationId",
+ )
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -68,7 +78,9 @@ async def test_raw_response_create_session(self, async_client: AsyncKernel) -> N
@pytest.mark.skip()
@parametrize
async def test_streaming_response_create_session(self, async_client: AsyncKernel) -> None:
- async with async_client.browser.with_streaming_response.create_session() as response:
+ async with async_client.browser.with_streaming_response.create_session(
+ invocation_id="invocationId",
+ ) 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 75dabc6..3e71e4d 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -721,12 +721,7 @@ def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter) -> No
with pytest.raises(APITimeoutError):
self.client.post(
"/apps/deploy",
- body=cast(
- object,
- maybe_transform(
- dict(app_name="REPLACE_ME", file=b"REPLACE_ME", version="REPLACE_ME"), AppDeployParams
- ),
- ),
+ body=cast(object, maybe_transform(dict(file=b"REPLACE_ME", version="REPLACE_ME"), AppDeployParams)),
cast_to=httpx.Response,
options={"headers": {RAW_RESPONSE_HEADER: "stream"}},
)
@@ -742,12 +737,7 @@ def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter) -> Non
with pytest.raises(APIStatusError):
self.client.post(
"/apps/deploy",
- body=cast(
- object,
- maybe_transform(
- dict(app_name="REPLACE_ME", file=b"REPLACE_ME", version="REPLACE_ME"), AppDeployParams
- ),
- ),
+ body=cast(object, maybe_transform(dict(file=b"REPLACE_ME", version="REPLACE_ME"), AppDeployParams)),
cast_to=httpx.Response,
options={"headers": {RAW_RESPONSE_HEADER: "stream"}},
)
@@ -780,9 +770,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
respx_mock.post("/apps/deploy").mock(side_effect=retry_handler)
- response = client.apps.with_raw_response.deploy(
- app_name="my-awesome-app", file=b"raw file contents", version="1.0.0"
- )
+ response = client.apps.with_raw_response.deploy(file=b"raw file contents")
assert response.retries_taken == failures_before_success
assert int(response.http_request.headers.get("x-stainless-retry-count")) == failures_before_success
@@ -807,10 +795,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
respx_mock.post("/apps/deploy").mock(side_effect=retry_handler)
response = client.apps.with_raw_response.deploy(
- app_name="my-awesome-app",
- file=b"raw file contents",
- version="1.0.0",
- extra_headers={"x-stainless-retry-count": Omit()},
+ file=b"raw file contents", extra_headers={"x-stainless-retry-count": Omit()}
)
assert len(response.http_request.headers.get_list("x-stainless-retry-count")) == 0
@@ -835,10 +820,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
respx_mock.post("/apps/deploy").mock(side_effect=retry_handler)
response = client.apps.with_raw_response.deploy(
- app_name="my-awesome-app",
- file=b"raw file contents",
- version="1.0.0",
- extra_headers={"x-stainless-retry-count": "42"},
+ file=b"raw file contents", extra_headers={"x-stainless-retry-count": "42"}
)
assert response.http_request.headers.get("x-stainless-retry-count") == "42"
@@ -1531,12 +1513,7 @@ async def test_retrying_timeout_errors_doesnt_leak(self, respx_mock: MockRouter)
with pytest.raises(APITimeoutError):
await self.client.post(
"/apps/deploy",
- body=cast(
- object,
- maybe_transform(
- dict(app_name="REPLACE_ME", file=b"REPLACE_ME", version="REPLACE_ME"), AppDeployParams
- ),
- ),
+ body=cast(object, maybe_transform(dict(file=b"REPLACE_ME", version="REPLACE_ME"), AppDeployParams)),
cast_to=httpx.Response,
options={"headers": {RAW_RESPONSE_HEADER: "stream"}},
)
@@ -1552,12 +1529,7 @@ async def test_retrying_status_errors_doesnt_leak(self, respx_mock: MockRouter)
with pytest.raises(APIStatusError):
await self.client.post(
"/apps/deploy",
- body=cast(
- object,
- maybe_transform(
- dict(app_name="REPLACE_ME", file=b"REPLACE_ME", version="REPLACE_ME"), AppDeployParams
- ),
- ),
+ body=cast(object, maybe_transform(dict(file=b"REPLACE_ME", version="REPLACE_ME"), AppDeployParams)),
cast_to=httpx.Response,
options={"headers": {RAW_RESPONSE_HEADER: "stream"}},
)
@@ -1591,9 +1563,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
respx_mock.post("/apps/deploy").mock(side_effect=retry_handler)
- response = await client.apps.with_raw_response.deploy(
- app_name="my-awesome-app", file=b"raw file contents", version="1.0.0"
- )
+ response = await client.apps.with_raw_response.deploy(file=b"raw file contents")
assert response.retries_taken == failures_before_success
assert int(response.http_request.headers.get("x-stainless-retry-count")) == failures_before_success
@@ -1619,10 +1589,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
respx_mock.post("/apps/deploy").mock(side_effect=retry_handler)
response = await client.apps.with_raw_response.deploy(
- app_name="my-awesome-app",
- file=b"raw file contents",
- version="1.0.0",
- extra_headers={"x-stainless-retry-count": Omit()},
+ file=b"raw file contents", extra_headers={"x-stainless-retry-count": Omit()}
)
assert len(response.http_request.headers.get_list("x-stainless-retry-count")) == 0
@@ -1648,10 +1615,7 @@ def retry_handler(_request: httpx.Request) -> httpx.Response:
respx_mock.post("/apps/deploy").mock(side_effect=retry_handler)
response = await client.apps.with_raw_response.deploy(
- app_name="my-awesome-app",
- file=b"raw file contents",
- version="1.0.0",
- extra_headers={"x-stainless-retry-count": "42"},
+ file=b"raw file contents", extra_headers={"x-stainless-retry-count": "42"}
)
assert response.http_request.headers.get("x-stainless-retry-count") == "42"
From d16997f17044b1eb68b8c9cfbda95813432cfc3f Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 12 May 2025 18:48:53 +0000
Subject: [PATCH 2/2] release: 0.1.0-alpha.8
---
.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 b5db7ce..c373724 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.1.0-alpha.7"
+ ".": "0.1.0-alpha.8"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 54ff9db..2bfed62 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## 0.1.0-alpha.8 (2025-05-12)
+
+Full Changelog: [v0.1.0-alpha.7...v0.1.0-alpha.8](https://github.com/onkernel/kernel-python-sdk/compare/v0.1.0-alpha.7...v0.1.0-alpha.8)
+
+### Features
+
+* **api:** update via SDK Studio ([68c2cc8](https://github.com/onkernel/kernel-python-sdk/commit/68c2cc821cf9c31f8e5e054ba69780cbba2449db))
+
## 0.1.0-alpha.7 (2025-05-11)
Full Changelog: [v0.1.0-alpha.6...v0.1.0-alpha.7](https://github.com/onkernel/kernel-python-sdk/compare/v0.1.0-alpha.6...v0.1.0-alpha.7)
diff --git a/pyproject.toml b/pyproject.toml
index 710383c..37fb003 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "kernel"
-version = "0.1.0-alpha.7"
+version = "0.1.0-alpha.8"
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 76a7255..924d714 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.1.0-alpha.7" # x-release-please-version
+__version__ = "0.1.0-alpha.8" # x-release-please-version