Skip to content

Commit 1c4af8e

Browse files
feat: Return credential value keys and support removing values on update
1 parent c6d6b65 commit 1c4af8e

5 files changed

Lines changed: 32 additions & 4 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: 125
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-61dab8d0d01c2838febaf4319114ae35aa169a813a102e93af6598ca0d445da2.yml
3-
openapi_spec_hash: c9fbe809670384dc5141dccb60e45672
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-ba32039d3975da7aa6d28e5184f0a44c9fbfe36ab7dbc71985d14e2ecc0867b9.yml
3+
openapi_spec_hash: a9f32fc90c2add2ae85af828c298e35b
44
config_hash: 06186eb40e0058a2a87ac251fc07415d

src/kernel/resources/credentials.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import httpx
88

99
from ..types import credential_list_params, credential_create_params, credential_update_params
10-
from .._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
10+
from .._types import Body, Omit, Query, Headers, NoneType, NotGiven, SequenceNotStr, omit, not_given
1111
from .._utils import path_template, maybe_transform, async_maybe_transform
1212
from .._compat import cached_property
1313
from .._resource import SyncAPIResource, AsyncAPIResource
@@ -145,6 +145,7 @@ def update(
145145
id_or_name: str,
146146
*,
147147
name: str | Omit = omit,
148+
remove_value_keys: SequenceNotStr[str] | Omit = omit,
148149
sso_provider: Optional[str] | Omit = omit,
149150
totp_secret: str | Omit = omit,
150151
values: Dict[str, str] | Omit = omit,
@@ -163,6 +164,9 @@ def update(
163164
Args:
164165
name: New name for the credential
165166
167+
remove_value_keys: Field names to remove from the credential's stored values. Removals are applied
168+
before `values` are merged, so a key present in both is kept with its new value.
169+
166170
sso_provider: If set, indicates this credential should be used with the specified SSO
167171
provider. Set to empty string or null to remove.
168172
@@ -187,6 +191,7 @@ def update(
187191
body=maybe_transform(
188192
{
189193
"name": name,
194+
"remove_value_keys": remove_value_keys,
190195
"sso_provider": sso_provider,
191196
"totp_secret": totp_secret,
192197
"values": values,
@@ -445,6 +450,7 @@ async def update(
445450
id_or_name: str,
446451
*,
447452
name: str | Omit = omit,
453+
remove_value_keys: SequenceNotStr[str] | Omit = omit,
448454
sso_provider: Optional[str] | Omit = omit,
449455
totp_secret: str | Omit = omit,
450456
values: Dict[str, str] | Omit = omit,
@@ -463,6 +469,9 @@ async def update(
463469
Args:
464470
name: New name for the credential
465471
472+
remove_value_keys: Field names to remove from the credential's stored values. Removals are applied
473+
before `values` are merged, so a key present in both is kept with its new value.
474+
466475
sso_provider: If set, indicates this credential should be used with the specified SSO
467476
provider. Set to empty string or null to remove.
468477
@@ -487,6 +496,7 @@ async def update(
487496
body=await async_maybe_transform(
488497
{
489498
"name": name,
499+
"remove_value_keys": remove_value_keys,
490500
"sso_provider": sso_provider,
491501
"totp_secret": totp_secret,
492502
"values": values,

src/kernel/types/credential.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

3-
from typing import Optional
3+
from typing import List, Optional
44
from datetime import datetime
55

66
from .._models import BaseModel
@@ -48,3 +48,10 @@ class Credential(BaseModel):
4848

4949
totp_code_expires_at: Optional[datetime] = None
5050
"""When the totp_code expires. Only included when totp_code is present."""
51+
52+
value_keys: Optional[List[str]] = None
53+
"""The field names stored in this credential's values (e.g., username, password).
54+
55+
Values themselves are never returned. Included on single-credential responses
56+
(create, get by id or name, update); omitted from list responses.
57+
"""

src/kernel/types/credential_update_params.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,22 @@
55
from typing import Dict, Optional
66
from typing_extensions import TypedDict
77

8+
from .._types import SequenceNotStr
9+
810
__all__ = ["CredentialUpdateParams"]
911

1012

1113
class CredentialUpdateParams(TypedDict, total=False):
1214
name: str
1315
"""New name for the credential"""
1416

17+
remove_value_keys: SequenceNotStr[str]
18+
"""Field names to remove from the credential's stored values.
19+
20+
Removals are applied before `values` are merged, so a key present in both is
21+
kept with its new value.
22+
"""
23+
1524
sso_provider: Optional[str]
1625
"""If set, indicates this credential should be used with the specified SSO
1726
provider.

tests/api_resources/test_credentials.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ def test_method_update_with_all_params(self, client: Kernel) -> None:
141141
credential = client.credentials.update(
142142
id_or_name="id_or_name",
143143
name="my-updated-login",
144+
remove_value_keys=["old_field"],
144145
sso_provider="google",
145146
totp_secret="JBSWY3DPEHPK3PXP",
146147
values={
@@ -433,6 +434,7 @@ async def test_method_update_with_all_params(self, async_client: AsyncKernel) ->
433434
credential = await async_client.credentials.update(
434435
id_or_name="id_or_name",
435436
name="my-updated-login",
437+
remove_value_keys=["old_field"],
436438
sso_provider="google",
437439
totp_secret="JBSWY3DPEHPK3PXP",
438440
values={

0 commit comments

Comments
 (0)