Skip to content

Commit 27c6eec

Browse files
feat(api): api update
1 parent 7c0d770 commit 27c6eec

7 files changed

Lines changed: 178 additions & 16 deletions

File tree

.stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 33
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/nen-labs%2Fsteel-44f289567c281ce445273c28f44fe7ccd44979172c4933bfbfe63bb5f119640c.yml
3-
openapi_spec_hash: 449cf480b2d477ef67ff32992734fb8c
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/nen-labs%2Fsteel-b5496a8d20faef3918563bbf1563b9c1f0ab280fa0aa32baca55faa95c8d8266.yml
3+
openapi_spec_hash: b776cb76def983d026964ea90cdb3e29
44
config_hash: 3dda15a7a3da8ba8e97a8ec239cbcb80

api.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,9 @@ from steel.types import (
115115

116116
Methods:
117117

118-
- <code title="put /v1/extensions/{extensionId}">client.extensions.<a href="./src/steel/resources/extensions.py">update</a>(extension_id) -> <a href="./src/steel/types/extension_update_response.py">ExtensionUpdateResponse</a></code>
118+
- <code title="put /v1/extensions/{extensionId}">client.extensions.<a href="./src/steel/resources/extensions.py">update</a>(extension_id, \*\*<a href="src/steel/types/extension_update_params.py">params</a>) -> <a href="./src/steel/types/extension_update_response.py">ExtensionUpdateResponse</a></code>
119119
- <code title="get /v1/extensions">client.extensions.<a href="./src/steel/resources/extensions.py">list</a>() -> <a href="./src/steel/types/extension_list_response.py">ExtensionListResponse</a></code>
120120
- <code title="delete /v1/extensions/{extensionId}">client.extensions.<a href="./src/steel/resources/extensions.py">delete</a>(extension_id) -> <a href="./src/steel/types/extension_delete_response.py">ExtensionDeleteResponse</a></code>
121121
- <code title="delete /v1/extensions">client.extensions.<a href="./src/steel/resources/extensions.py">delete_all</a>() -> <a href="./src/steel/types/extension_delete_all_response.py">ExtensionDeleteAllResponse</a></code>
122122
- <code title="get /v1/extensions/{extensionId}">client.extensions.<a href="./src/steel/resources/extensions.py">download</a>(extension_id) -> str</code>
123-
- <code title="post /v1/extensions">client.extensions.<a href="./src/steel/resources/extensions.py">upload</a>() -> <a href="./src/steel/types/extension_upload_response.py">ExtensionUploadResponse</a></code>
123+
- <code title="post /v1/extensions">client.extensions.<a href="./src/steel/resources/extensions.py">upload</a>(\*\*<a href="src/steel/types/extension_upload_params.py">params</a>) -> <a href="./src/steel/types/extension_upload_response.py">ExtensionUploadResponse</a></code>

src/steel/resources/extensions.py

Lines changed: 100 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
import httpx
66

7+
from ..types import extension_update_params, extension_upload_params
78
from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven
9+
from .._utils import maybe_transform, async_maybe_transform
810
from .._compat import cached_property
911
from .._resource import SyncAPIResource, AsyncAPIResource
1012
from .._response import (
@@ -47,6 +49,8 @@ def update(
4749
self,
4850
extension_id: str,
4951
*,
52+
file: object | NotGiven = NOT_GIVEN,
53+
url: str | NotGiven = NOT_GIVEN,
5054
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
5155
# The extra values given here take precedence over values defined on the client or passed to this method.
5256
extra_headers: Headers | None = None,
@@ -55,9 +59,14 @@ def update(
5559
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
5660
) -> ExtensionUpdateResponse:
5761
"""
58-
Update a Chrome extension (.zip/.crx file) for the organization
62+
Update a Chrome extension (.zip/.crx file or Chrome Web Store URL) for the
63+
organization
5964
6065
Args:
66+
file: Extension .zip/.crx file
67+
68+
url: Extension URL
69+
6170
extra_headers: Send extra headers
6271
6372
extra_query: Add additional query parameters to the request
@@ -68,8 +77,19 @@ def update(
6877
"""
6978
if not extension_id:
7079
raise ValueError(f"Expected a non-empty value for `extension_id` but received {extension_id!r}")
80+
# It should be noted that the actual Content-Type header that will be
81+
# sent to the server will contain a `boundary` parameter, e.g.
82+
# multipart/form-data; boundary=---abc--
83+
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
7184
return self._put(
7285
f"/v1/extensions/{extension_id}",
86+
body=maybe_transform(
87+
{
88+
"file": file,
89+
"url": url,
90+
},
91+
extension_update_params.ExtensionUpdateParams,
92+
),
7393
options=make_request_options(
7494
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
7595
),
@@ -183,16 +203,45 @@ def download(
183203
def upload(
184204
self,
185205
*,
206+
file: object | NotGiven = NOT_GIVEN,
207+
url: str | NotGiven = NOT_GIVEN,
186208
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
187209
# The extra values given here take precedence over values defined on the client or passed to this method.
188210
extra_headers: Headers | None = None,
189211
extra_query: Query | None = None,
190212
extra_body: Body | None = None,
191213
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
192214
) -> ExtensionUploadResponse:
193-
"""Upload a Chrome extension (.zip/.crx file) for the organization"""
215+
"""
216+
Upload a Chrome extension (.zip/.crx file or Chrome Web Store URL) for the
217+
organization
218+
219+
Args:
220+
file: Extension .zip/.crx file
221+
222+
url: Extension URL
223+
224+
extra_headers: Send extra headers
225+
226+
extra_query: Add additional query parameters to the request
227+
228+
extra_body: Add additional JSON properties to the request
229+
230+
timeout: Override the client-level default timeout for this request, in seconds
231+
"""
232+
# It should be noted that the actual Content-Type header that will be
233+
# sent to the server will contain a `boundary` parameter, e.g.
234+
# multipart/form-data; boundary=---abc--
235+
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
194236
return self._post(
195237
"/v1/extensions",
238+
body=maybe_transform(
239+
{
240+
"file": file,
241+
"url": url,
242+
},
243+
extension_upload_params.ExtensionUploadParams,
244+
),
196245
options=make_request_options(
197246
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
198247
),
@@ -224,6 +273,8 @@ async def update(
224273
self,
225274
extension_id: str,
226275
*,
276+
file: object | NotGiven = NOT_GIVEN,
277+
url: str | NotGiven = NOT_GIVEN,
227278
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
228279
# The extra values given here take precedence over values defined on the client or passed to this method.
229280
extra_headers: Headers | None = None,
@@ -232,9 +283,14 @@ async def update(
232283
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
233284
) -> ExtensionUpdateResponse:
234285
"""
235-
Update a Chrome extension (.zip/.crx file) for the organization
286+
Update a Chrome extension (.zip/.crx file or Chrome Web Store URL) for the
287+
organization
236288
237289
Args:
290+
file: Extension .zip/.crx file
291+
292+
url: Extension URL
293+
238294
extra_headers: Send extra headers
239295
240296
extra_query: Add additional query parameters to the request
@@ -245,8 +301,19 @@ async def update(
245301
"""
246302
if not extension_id:
247303
raise ValueError(f"Expected a non-empty value for `extension_id` but received {extension_id!r}")
304+
# It should be noted that the actual Content-Type header that will be
305+
# sent to the server will contain a `boundary` parameter, e.g.
306+
# multipart/form-data; boundary=---abc--
307+
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
248308
return await self._put(
249309
f"/v1/extensions/{extension_id}",
310+
body=await async_maybe_transform(
311+
{
312+
"file": file,
313+
"url": url,
314+
},
315+
extension_update_params.ExtensionUpdateParams,
316+
),
250317
options=make_request_options(
251318
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
252319
),
@@ -360,16 +427,45 @@ async def download(
360427
async def upload(
361428
self,
362429
*,
430+
file: object | NotGiven = NOT_GIVEN,
431+
url: str | NotGiven = NOT_GIVEN,
363432
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
364433
# The extra values given here take precedence over values defined on the client or passed to this method.
365434
extra_headers: Headers | None = None,
366435
extra_query: Query | None = None,
367436
extra_body: Body | None = None,
368437
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
369438
) -> ExtensionUploadResponse:
370-
"""Upload a Chrome extension (.zip/.crx file) for the organization"""
439+
"""
440+
Upload a Chrome extension (.zip/.crx file or Chrome Web Store URL) for the
441+
organization
442+
443+
Args:
444+
file: Extension .zip/.crx file
445+
446+
url: Extension URL
447+
448+
extra_headers: Send extra headers
449+
450+
extra_query: Add additional query parameters to the request
451+
452+
extra_body: Add additional JSON properties to the request
453+
454+
timeout: Override the client-level default timeout for this request, in seconds
455+
"""
456+
# It should be noted that the actual Content-Type header that will be
457+
# sent to the server will contain a `boundary` parameter, e.g.
458+
# multipart/form-data; boundary=---abc--
459+
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
371460
return await self._post(
372461
"/v1/extensions",
462+
body=await async_maybe_transform(
463+
{
464+
"file": file,
465+
"url": url,
466+
},
467+
extension_upload_params.ExtensionUploadParams,
468+
),
373469
options=make_request_options(
374470
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
375471
),

src/steel/types/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
from .session_create_params import SessionCreateParams as SessionCreateParams
1818
from .credential_list_params import CredentialListParams as CredentialListParams
1919
from .extension_list_response import ExtensionListResponse as ExtensionListResponse
20+
from .extension_update_params import ExtensionUpdateParams as ExtensionUpdateParams
21+
from .extension_upload_params import ExtensionUploadParams as ExtensionUploadParams
2022
from .session_events_response import SessionEventsResponse as SessionEventsResponse
2123
from .client_screenshot_params import ClientScreenshotParams as ClientScreenshotParams
2224
from .credential_create_params import CredentialCreateParams as CredentialCreateParams
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
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 TypedDict
6+
7+
__all__ = ["ExtensionUpdateParams"]
8+
9+
10+
class ExtensionUpdateParams(TypedDict, total=False):
11+
file: object
12+
"""Extension .zip/.crx file"""
13+
14+
url: str
15+
"""Extension URL"""
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
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 TypedDict
6+
7+
__all__ = ["ExtensionUploadParams"]
8+
9+
10+
class ExtensionUploadParams(TypedDict, total=False):
11+
file: object
12+
"""Extension .zip/.crx file"""
13+
14+
url: str
15+
"""Extension URL"""

tests/api_resources/test_extensions.py

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,23 @@ class TestExtensions:
2626
@parametrize
2727
def test_method_update(self, client: Steel) -> None:
2828
extension = client.extensions.update(
29-
"extensionId",
29+
extension_id="extensionId",
30+
)
31+
assert_matches_type(ExtensionUpdateResponse, extension, path=["response"])
32+
33+
@parametrize
34+
def test_method_update_with_all_params(self, client: Steel) -> None:
35+
extension = client.extensions.update(
36+
extension_id="extensionId",
37+
file={},
38+
url="https://example.com",
3039
)
3140
assert_matches_type(ExtensionUpdateResponse, extension, path=["response"])
3241

3342
@parametrize
3443
def test_raw_response_update(self, client: Steel) -> None:
3544
response = client.extensions.with_raw_response.update(
36-
"extensionId",
45+
extension_id="extensionId",
3746
)
3847

3948
assert response.is_closed is True
@@ -44,7 +53,7 @@ def test_raw_response_update(self, client: Steel) -> None:
4453
@parametrize
4554
def test_streaming_response_update(self, client: Steel) -> None:
4655
with client.extensions.with_streaming_response.update(
47-
"extensionId",
56+
extension_id="extensionId",
4857
) as response:
4958
assert not response.is_closed
5059
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -58,7 +67,7 @@ def test_streaming_response_update(self, client: Steel) -> None:
5867
def test_path_params_update(self, client: Steel) -> None:
5968
with pytest.raises(ValueError, match=r"Expected a non-empty value for `extension_id` but received ''"):
6069
client.extensions.with_raw_response.update(
61-
"",
70+
extension_id="",
6271
)
6372

6473
@parametrize
@@ -192,6 +201,14 @@ def test_method_upload(self, client: Steel) -> None:
192201
extension = client.extensions.upload()
193202
assert_matches_type(ExtensionUploadResponse, extension, path=["response"])
194203

204+
@parametrize
205+
def test_method_upload_with_all_params(self, client: Steel) -> None:
206+
extension = client.extensions.upload(
207+
file={},
208+
url="https://example.com",
209+
)
210+
assert_matches_type(ExtensionUploadResponse, extension, path=["response"])
211+
195212
@parametrize
196213
def test_raw_response_upload(self, client: Steel) -> None:
197214
response = client.extensions.with_raw_response.upload()
@@ -221,14 +238,23 @@ class TestAsyncExtensions:
221238
@parametrize
222239
async def test_method_update(self, async_client: AsyncSteel) -> None:
223240
extension = await async_client.extensions.update(
224-
"extensionId",
241+
extension_id="extensionId",
242+
)
243+
assert_matches_type(ExtensionUpdateResponse, extension, path=["response"])
244+
245+
@parametrize
246+
async def test_method_update_with_all_params(self, async_client: AsyncSteel) -> None:
247+
extension = await async_client.extensions.update(
248+
extension_id="extensionId",
249+
file={},
250+
url="https://example.com",
225251
)
226252
assert_matches_type(ExtensionUpdateResponse, extension, path=["response"])
227253

228254
@parametrize
229255
async def test_raw_response_update(self, async_client: AsyncSteel) -> None:
230256
response = await async_client.extensions.with_raw_response.update(
231-
"extensionId",
257+
extension_id="extensionId",
232258
)
233259

234260
assert response.is_closed is True
@@ -239,7 +265,7 @@ async def test_raw_response_update(self, async_client: AsyncSteel) -> None:
239265
@parametrize
240266
async def test_streaming_response_update(self, async_client: AsyncSteel) -> None:
241267
async with async_client.extensions.with_streaming_response.update(
242-
"extensionId",
268+
extension_id="extensionId",
243269
) as response:
244270
assert not response.is_closed
245271
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -253,7 +279,7 @@ async def test_streaming_response_update(self, async_client: AsyncSteel) -> None
253279
async def test_path_params_update(self, async_client: AsyncSteel) -> None:
254280
with pytest.raises(ValueError, match=r"Expected a non-empty value for `extension_id` but received ''"):
255281
await async_client.extensions.with_raw_response.update(
256-
"",
282+
extension_id="",
257283
)
258284

259285
@parametrize
@@ -387,6 +413,14 @@ async def test_method_upload(self, async_client: AsyncSteel) -> None:
387413
extension = await async_client.extensions.upload()
388414
assert_matches_type(ExtensionUploadResponse, extension, path=["response"])
389415

416+
@parametrize
417+
async def test_method_upload_with_all_params(self, async_client: AsyncSteel) -> None:
418+
extension = await async_client.extensions.upload(
419+
file={},
420+
url="https://example.com",
421+
)
422+
assert_matches_type(ExtensionUploadResponse, extension, path=["response"])
423+
390424
@parametrize
391425
async def test_raw_response_upload(self, async_client: AsyncSteel) -> None:
392426
response = await async_client.extensions.with_raw_response.upload()

0 commit comments

Comments
 (0)