Skip to content

Commit f98c6d3

Browse files
feat(api): api update
1 parent 6c63344 commit f98c6d3

File tree

6 files changed

+220
-4
lines changed

6 files changed

+220
-4
lines changed

.stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 29
1+
configured_endpoints: 30
22
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/arcade-ai%2Farcade-engine-4dc4e58ef402ce5362e0a8988b3928a8bfa0d5ba847f7ad8b14226a0cf282f28.yml
33
openapi_spec_hash: fb72b9121306240c419669a3d42e45f6
4-
config_hash: f0d78fdab30e3346ae9b6804632ae8b6
4+
config_hash: 7d1d98a4a1938a6884fa81ccfa3184c5

api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ from arcadepy.types.admin import SecretResponse, SecretListResponse
5050

5151
Methods:
5252

53+
- <code title="post /v1/admin/secrets/{secret_key}">client.admin.secrets.<a href="./src/arcadepy/resources/admin/secrets.py">create</a>(secret_key, \*\*<a href="src/arcadepy/types/admin/secret_create_params.py">params</a>) -> <a href="./src/arcadepy/types/admin/secret_response.py">SecretResponse</a></code>
5354
- <code title="get /v1/admin/secrets">client.admin.secrets.<a href="./src/arcadepy/resources/admin/secrets.py">list</a>() -> <a href="./src/arcadepy/types/admin/secret_list_response.py">SecretListResponse</a></code>
5455
- <code title="delete /v1/admin/secrets/{secret_id}">client.admin.secrets.<a href="./src/arcadepy/resources/admin/secrets.py">delete</a>(secret_id) -> None</code>
5556

src/arcadepy/resources/admin/secrets.py

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
import httpx
66

7-
from ..._types import Body, Query, Headers, NoneType, NotGiven, not_given
7+
from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
8+
from ..._utils import maybe_transform, async_maybe_transform
89
from ..._compat import cached_property
910
from ..._resource import SyncAPIResource, AsyncAPIResource
1011
from ..._response import (
@@ -13,7 +14,9 @@
1314
async_to_raw_response_wrapper,
1415
async_to_streamed_response_wrapper,
1516
)
17+
from ...types.admin import secret_create_params
1618
from ..._base_client import make_request_options
19+
from ...types.admin.secret_response import SecretResponse
1720
from ...types.admin.secret_list_response import SecretListResponse
1821

1922
__all__ = ["SecretsResource", "AsyncSecretsResource"]
@@ -39,6 +42,48 @@ def with_streaming_response(self) -> SecretsResourceWithStreamingResponse:
3942
"""
4043
return SecretsResourceWithStreamingResponse(self)
4144

45+
def create(
46+
self,
47+
secret_key: str,
48+
*,
49+
value: str,
50+
description: str | Omit = omit,
51+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
52+
# The extra values given here take precedence over values defined on the client or passed to this method.
53+
extra_headers: Headers | None = None,
54+
extra_query: Query | None = None,
55+
extra_body: Body | None = None,
56+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
57+
) -> SecretResponse:
58+
"""
59+
Create or update a secret
60+
61+
Args:
62+
extra_headers: Send extra headers
63+
64+
extra_query: Add additional query parameters to the request
65+
66+
extra_body: Add additional JSON properties to the request
67+
68+
timeout: Override the client-level default timeout for this request, in seconds
69+
"""
70+
if not secret_key:
71+
raise ValueError(f"Expected a non-empty value for `secret_key` but received {secret_key!r}")
72+
return self._post(
73+
f"/v1/admin/secrets/{secret_key}",
74+
body=maybe_transform(
75+
{
76+
"value": value,
77+
"description": description,
78+
},
79+
secret_create_params.SecretCreateParams,
80+
),
81+
options=make_request_options(
82+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
83+
),
84+
cast_to=SecretResponse,
85+
)
86+
4287
def list(
4388
self,
4489
*,
@@ -113,6 +158,48 @@ def with_streaming_response(self) -> AsyncSecretsResourceWithStreamingResponse:
113158
"""
114159
return AsyncSecretsResourceWithStreamingResponse(self)
115160

161+
async def create(
162+
self,
163+
secret_key: str,
164+
*,
165+
value: str,
166+
description: str | Omit = omit,
167+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
168+
# The extra values given here take precedence over values defined on the client or passed to this method.
169+
extra_headers: Headers | None = None,
170+
extra_query: Query | None = None,
171+
extra_body: Body | None = None,
172+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
173+
) -> SecretResponse:
174+
"""
175+
Create or update a secret
176+
177+
Args:
178+
extra_headers: Send extra headers
179+
180+
extra_query: Add additional query parameters to the request
181+
182+
extra_body: Add additional JSON properties to the request
183+
184+
timeout: Override the client-level default timeout for this request, in seconds
185+
"""
186+
if not secret_key:
187+
raise ValueError(f"Expected a non-empty value for `secret_key` but received {secret_key!r}")
188+
return await self._post(
189+
f"/v1/admin/secrets/{secret_key}",
190+
body=await async_maybe_transform(
191+
{
192+
"value": value,
193+
"description": description,
194+
},
195+
secret_create_params.SecretCreateParams,
196+
),
197+
options=make_request_options(
198+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
199+
),
200+
cast_to=SecretResponse,
201+
)
202+
116203
async def list(
117204
self,
118205
*,
@@ -171,6 +258,9 @@ class SecretsResourceWithRawResponse:
171258
def __init__(self, secrets: SecretsResource) -> None:
172259
self._secrets = secrets
173260

261+
self.create = to_raw_response_wrapper(
262+
secrets.create,
263+
)
174264
self.list = to_raw_response_wrapper(
175265
secrets.list,
176266
)
@@ -183,6 +273,9 @@ class AsyncSecretsResourceWithRawResponse:
183273
def __init__(self, secrets: AsyncSecretsResource) -> None:
184274
self._secrets = secrets
185275

276+
self.create = async_to_raw_response_wrapper(
277+
secrets.create,
278+
)
186279
self.list = async_to_raw_response_wrapper(
187280
secrets.list,
188281
)
@@ -195,6 +288,9 @@ class SecretsResourceWithStreamingResponse:
195288
def __init__(self, secrets: SecretsResource) -> None:
196289
self._secrets = secrets
197290

291+
self.create = to_streamed_response_wrapper(
292+
secrets.create,
293+
)
198294
self.list = to_streamed_response_wrapper(
199295
secrets.list,
200296
)
@@ -207,6 +303,9 @@ class AsyncSecretsResourceWithStreamingResponse:
207303
def __init__(self, secrets: AsyncSecretsResource) -> None:
208304
self._secrets = secrets
209305

306+
self.create = async_to_streamed_response_wrapper(
307+
secrets.create,
308+
)
210309
self.list = async_to_streamed_response_wrapper(
211310
secrets.list,
212311
)

src/arcadepy/types/admin/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from __future__ import annotations
44

55
from .secret_response import SecretResponse as SecretResponse
6+
from .secret_create_params import SecretCreateParams as SecretCreateParams
67
from .secret_list_response import SecretListResponse as SecretListResponse
78
from .auth_provider_response import AuthProviderResponse as AuthProviderResponse
89
from .user_connection_response import UserConnectionResponse as UserConnectionResponse
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from __future__ import annotations
4+
5+
from typing_extensions import Required, TypedDict
6+
7+
__all__ = ["SecretCreateParams"]
8+
9+
10+
class SecretCreateParams(TypedDict, total=False):
11+
value: Required[str]
12+
13+
description: str

tests/api_resources/admin/test_secrets.py

Lines changed: 103 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,65 @@
99

1010
from arcadepy import Arcade, AsyncArcade
1111
from tests.utils import assert_matches_type
12-
from arcadepy.types.admin import SecretListResponse
12+
from arcadepy.types.admin import SecretResponse, SecretListResponse
1313

1414
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
1515

1616

1717
class TestSecrets:
1818
parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
1919

20+
@parametrize
21+
def test_method_create(self, client: Arcade) -> None:
22+
secret = client.admin.secrets.create(
23+
secret_key="secret_key",
24+
value="value",
25+
)
26+
assert_matches_type(SecretResponse, secret, path=["response"])
27+
28+
@parametrize
29+
def test_method_create_with_all_params(self, client: Arcade) -> None:
30+
secret = client.admin.secrets.create(
31+
secret_key="secret_key",
32+
value="value",
33+
description="description",
34+
)
35+
assert_matches_type(SecretResponse, secret, path=["response"])
36+
37+
@parametrize
38+
def test_raw_response_create(self, client: Arcade) -> None:
39+
response = client.admin.secrets.with_raw_response.create(
40+
secret_key="secret_key",
41+
value="value",
42+
)
43+
44+
assert response.is_closed is True
45+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
46+
secret = response.parse()
47+
assert_matches_type(SecretResponse, secret, path=["response"])
48+
49+
@parametrize
50+
def test_streaming_response_create(self, client: Arcade) -> None:
51+
with client.admin.secrets.with_streaming_response.create(
52+
secret_key="secret_key",
53+
value="value",
54+
) as response:
55+
assert not response.is_closed
56+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
57+
58+
secret = response.parse()
59+
assert_matches_type(SecretResponse, secret, path=["response"])
60+
61+
assert cast(Any, response.is_closed) is True
62+
63+
@parametrize
64+
def test_path_params_create(self, client: Arcade) -> None:
65+
with pytest.raises(ValueError, match=r"Expected a non-empty value for `secret_key` but received ''"):
66+
client.admin.secrets.with_raw_response.create(
67+
secret_key="",
68+
value="value",
69+
)
70+
2071
@parametrize
2172
def test_method_list(self, client: Arcade) -> None:
2273
secret = client.admin.secrets.list()
@@ -86,6 +137,57 @@ class TestAsyncSecrets:
86137
"async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
87138
)
88139

140+
@parametrize
141+
async def test_method_create(self, async_client: AsyncArcade) -> None:
142+
secret = await async_client.admin.secrets.create(
143+
secret_key="secret_key",
144+
value="value",
145+
)
146+
assert_matches_type(SecretResponse, secret, path=["response"])
147+
148+
@parametrize
149+
async def test_method_create_with_all_params(self, async_client: AsyncArcade) -> None:
150+
secret = await async_client.admin.secrets.create(
151+
secret_key="secret_key",
152+
value="value",
153+
description="description",
154+
)
155+
assert_matches_type(SecretResponse, secret, path=["response"])
156+
157+
@parametrize
158+
async def test_raw_response_create(self, async_client: AsyncArcade) -> None:
159+
response = await async_client.admin.secrets.with_raw_response.create(
160+
secret_key="secret_key",
161+
value="value",
162+
)
163+
164+
assert response.is_closed is True
165+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
166+
secret = await response.parse()
167+
assert_matches_type(SecretResponse, secret, path=["response"])
168+
169+
@parametrize
170+
async def test_streaming_response_create(self, async_client: AsyncArcade) -> None:
171+
async with async_client.admin.secrets.with_streaming_response.create(
172+
secret_key="secret_key",
173+
value="value",
174+
) as response:
175+
assert not response.is_closed
176+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
177+
178+
secret = await response.parse()
179+
assert_matches_type(SecretResponse, secret, path=["response"])
180+
181+
assert cast(Any, response.is_closed) is True
182+
183+
@parametrize
184+
async def test_path_params_create(self, async_client: AsyncArcade) -> None:
185+
with pytest.raises(ValueError, match=r"Expected a non-empty value for `secret_key` but received ''"):
186+
await async_client.admin.secrets.with_raw_response.create(
187+
secret_key="",
188+
value="value",
189+
)
190+
89191
@parametrize
90192
async def test_method_list(self, async_client: AsyncArcade) -> None:
91193
secret = await async_client.admin.secrets.list()

0 commit comments

Comments
 (0)