Skip to content

Commit 8f51b16

Browse files
feat: Forward Idempotency-Key on playwright and REPL execution
Stainless-Generated-From: 7349f54745cd756eb539fbed93b972348a67507e
1 parent 99d8515 commit 8f51b16

34 files changed

Lines changed: 1828 additions & 200 deletions

‎src/kernel/_client.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ def __init__(
219219
install_direct_vm_auth_stripping(self._client)
220220
install_stale_direct_vm_auth_eviction(self._client)
221221

222+
self._idempotency_header = "Idempotency-Key"
223+
222224
@cached_property
223225
def deployments(self) -> DeploymentsResource:
224226
"""Create and manage app deployments and stream deployment events."""
@@ -630,6 +632,8 @@ def __init__(
630632
install_async_direct_vm_auth_stripping(self._client)
631633
install_async_stale_direct_vm_auth_eviction(self._client)
632634

635+
self._idempotency_header = "Idempotency-Key"
636+
633637
@cached_property
634638
def deployments(self) -> AsyncDeploymentsResource:
635639
"""Create and manage app deployments and stream deployment events."""

‎src/kernel/resources/api_keys.py‎

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def create(
6969
extra_query: Query | None = None,
7070
extra_body: Body | None = None,
7171
timeout: float | httpx.Timeout | None | NotGiven = not_given,
72+
idempotency_key: str | None = None,
7273
) -> CreatedAPIKey:
7374
"""Create a new API key.
7475
@@ -96,6 +97,8 @@ def create(
9697
extra_body: Add additional JSON properties to the request
9798
9899
timeout: Override the client-level default timeout for this request, in seconds
100+
101+
idempotency_key: Specify a custom idempotency key for this request
99102
"""
100103
return self._post(
101104
"/org/api_keys",
@@ -110,7 +113,11 @@ def create(
110113
api_key_create_params.APIKeyCreateParams,
111114
),
112115
options=make_request_options(
113-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
116+
extra_headers=extra_headers,
117+
extra_query=extra_query,
118+
extra_body=extra_body,
119+
timeout=timeout,
120+
idempotency_key=idempotency_key,
114121
),
115122
cast_to=CreatedAPIKey,
116123
)
@@ -171,6 +178,7 @@ def update(
171178
extra_query: Query | None = None,
172179
extra_body: Body | None = None,
173180
timeout: float | httpx.Timeout | None | NotGiven = not_given,
181+
idempotency_key: str | None = None,
174182
) -> APIKey:
175183
"""
176184
Update an API key's name.
@@ -185,14 +193,20 @@ def update(
185193
extra_body: Add additional JSON properties to the request
186194
187195
timeout: Override the client-level default timeout for this request, in seconds
196+
197+
idempotency_key: Specify a custom idempotency key for this request
188198
"""
189199
if not id:
190200
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
191201
return self._patch(
192202
path_template("/org/api_keys/{id}", id=id),
193203
body=maybe_transform({"name": name}, api_key_update_params.APIKeyUpdateParams),
194204
options=make_request_options(
195-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
205+
extra_headers=extra_headers,
206+
extra_query=extra_query,
207+
extra_body=extra_body,
208+
timeout=timeout,
209+
idempotency_key=idempotency_key,
196210
),
197211
cast_to=APIKey,
198212
)
@@ -286,6 +300,7 @@ def delete(
286300
extra_query: Query | None = None,
287301
extra_body: Body | None = None,
288302
timeout: float | httpx.Timeout | None | NotGiven = not_given,
303+
idempotency_key: str | None = None,
289304
) -> None:
290305
"""Delete an API key.
291306
@@ -300,14 +315,20 @@ def delete(
300315
extra_body: Add additional JSON properties to the request
301316
302317
timeout: Override the client-level default timeout for this request, in seconds
318+
319+
idempotency_key: Specify a custom idempotency key for this request
303320
"""
304321
if not id:
305322
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
306323
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
307324
return self._delete(
308325
path_template("/org/api_keys/{id}", id=id),
309326
options=make_request_options(
310-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
327+
extra_headers=extra_headers,
328+
extra_query=extra_query,
329+
extra_body=extra_body,
330+
timeout=timeout,
331+
idempotency_key=idempotency_key,
311332
),
312333
cast_to=NoneType,
313334
)
@@ -324,6 +345,7 @@ def rotate(
324345
extra_query: Query | None = None,
325346
extra_body: Body | None = None,
326347
timeout: float | httpx.Timeout | None | NotGiven = not_given,
348+
idempotency_key: str | None = None,
327349
) -> CreatedAPIKey:
328350
"""Rotate an API key.
329351
@@ -345,6 +367,8 @@ def rotate(
345367
extra_body: Add additional JSON properties to the request
346368
347369
timeout: Override the client-level default timeout for this request, in seconds
370+
371+
idempotency_key: Specify a custom idempotency key for this request
348372
"""
349373
if not id:
350374
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
@@ -358,7 +382,11 @@ def rotate(
358382
api_key_rotate_params.APIKeyRotateParams,
359383
),
360384
options=make_request_options(
361-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
385+
extra_headers=extra_headers,
386+
extra_query=extra_query,
387+
extra_body=extra_body,
388+
timeout=timeout,
389+
idempotency_key=idempotency_key,
362390
),
363391
cast_to=CreatedAPIKey,
364392
)
@@ -400,6 +428,7 @@ async def create(
400428
extra_query: Query | None = None,
401429
extra_body: Body | None = None,
402430
timeout: float | httpx.Timeout | None | NotGiven = not_given,
431+
idempotency_key: str | None = None,
403432
) -> CreatedAPIKey:
404433
"""Create a new API key.
405434
@@ -427,6 +456,8 @@ async def create(
427456
extra_body: Add additional JSON properties to the request
428457
429458
timeout: Override the client-level default timeout for this request, in seconds
459+
460+
idempotency_key: Specify a custom idempotency key for this request
430461
"""
431462
return await self._post(
432463
"/org/api_keys",
@@ -441,7 +472,11 @@ async def create(
441472
api_key_create_params.APIKeyCreateParams,
442473
),
443474
options=make_request_options(
444-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
475+
extra_headers=extra_headers,
476+
extra_query=extra_query,
477+
extra_body=extra_body,
478+
timeout=timeout,
479+
idempotency_key=idempotency_key,
445480
),
446481
cast_to=CreatedAPIKey,
447482
)
@@ -502,6 +537,7 @@ async def update(
502537
extra_query: Query | None = None,
503538
extra_body: Body | None = None,
504539
timeout: float | httpx.Timeout | None | NotGiven = not_given,
540+
idempotency_key: str | None = None,
505541
) -> APIKey:
506542
"""
507543
Update an API key's name.
@@ -516,14 +552,20 @@ async def update(
516552
extra_body: Add additional JSON properties to the request
517553
518554
timeout: Override the client-level default timeout for this request, in seconds
555+
556+
idempotency_key: Specify a custom idempotency key for this request
519557
"""
520558
if not id:
521559
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
522560
return await self._patch(
523561
path_template("/org/api_keys/{id}", id=id),
524562
body=await async_maybe_transform({"name": name}, api_key_update_params.APIKeyUpdateParams),
525563
options=make_request_options(
526-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
564+
extra_headers=extra_headers,
565+
extra_query=extra_query,
566+
extra_body=extra_body,
567+
timeout=timeout,
568+
idempotency_key=idempotency_key,
527569
),
528570
cast_to=APIKey,
529571
)
@@ -617,6 +659,7 @@ async def delete(
617659
extra_query: Query | None = None,
618660
extra_body: Body | None = None,
619661
timeout: float | httpx.Timeout | None | NotGiven = not_given,
662+
idempotency_key: str | None = None,
620663
) -> None:
621664
"""Delete an API key.
622665
@@ -631,14 +674,20 @@ async def delete(
631674
extra_body: Add additional JSON properties to the request
632675
633676
timeout: Override the client-level default timeout for this request, in seconds
677+
678+
idempotency_key: Specify a custom idempotency key for this request
634679
"""
635680
if not id:
636681
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
637682
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
638683
return await self._delete(
639684
path_template("/org/api_keys/{id}", id=id),
640685
options=make_request_options(
641-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
686+
extra_headers=extra_headers,
687+
extra_query=extra_query,
688+
extra_body=extra_body,
689+
timeout=timeout,
690+
idempotency_key=idempotency_key,
642691
),
643692
cast_to=NoneType,
644693
)
@@ -655,6 +704,7 @@ async def rotate(
655704
extra_query: Query | None = None,
656705
extra_body: Body | None = None,
657706
timeout: float | httpx.Timeout | None | NotGiven = not_given,
707+
idempotency_key: str | None = None,
658708
) -> CreatedAPIKey:
659709
"""Rotate an API key.
660710
@@ -676,6 +726,8 @@ async def rotate(
676726
extra_body: Add additional JSON properties to the request
677727
678728
timeout: Override the client-level default timeout for this request, in seconds
729+
730+
idempotency_key: Specify a custom idempotency key for this request
679731
"""
680732
if not id:
681733
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
@@ -689,7 +741,11 @@ async def rotate(
689741
api_key_rotate_params.APIKeyRotateParams,
690742
),
691743
options=make_request_options(
692-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
744+
extra_headers=extra_headers,
745+
extra_query=extra_query,
746+
extra_body=extra_body,
747+
timeout=timeout,
748+
idempotency_key=idempotency_key,
693749
),
694750
cast_to=CreatedAPIKey,
695751
)

0 commit comments

Comments
 (0)