Skip to content

Commit f9ca7c1

Browse files
feat(api): allow setting key-value tags on a browser session at create time
1 parent 62f45a6 commit f9ca7c1

15 files changed

Lines changed: 114 additions & 3 deletions

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 117
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-d0f7d8820ee342b6b8e32d5c08620d7a31135a6aabbe8266118b54269fbabb9d.yml
3-
openapi_spec_hash: 371eb419c25eb160fbc0135e45c133d1
4-
config_hash: 36159c262d293fbeacf513ab600a1729
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-8f84f4214a8024d8ea62ee639eeaf2fa26900fabe23c8b87accb41d529a0bf4f.yml
3+
openapi_spec_hash: db14f415438b3d338d9376bddc83a5cf
4+
config_hash: 590bf8cb85948cf1e63b7b5ef60686c8

api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ from kernel.types import (
8383
BrowserPoolRef,
8484
BrowserUsage,
8585
Profile,
86+
Tags,
8687
BrowserCreateResponse,
8788
BrowserRetrieveResponse,
8889
BrowserUpdateResponse,

src/kernel/resources/browsers/browsers.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
)
8686
from ...pagination import SyncOffsetPagination, AsyncOffsetPagination
8787
from ..._base_client import AsyncPaginator, make_request_options
88+
from ...types.tags_param import TagsParam
8889
from ...types.browser_curl_response import BrowserCurlResponse
8990
from ...types.browser_list_response import BrowserListResponse
9091
from ...lib.browser_routing.raw_http import (
@@ -174,6 +175,7 @@ def create(
174175
proxy_id: str | Omit = omit,
175176
start_url: str | Omit = omit,
176177
stealth: bool | Omit = omit,
178+
tags: TagsParam | Omit = omit,
177179
telemetry: Optional[browser_create_params.Telemetry] | Omit = omit,
178180
timeout_seconds: int | Omit = omit,
179181
viewport: BrowserViewport | Omit = omit,
@@ -224,6 +226,9 @@ def create(
224226
stealth: If true, launches the browser in stealth mode to reduce detection by anti-bot
225227
mechanisms.
226228
229+
tags: Optional user-defined key-value tags for the browser session, used to find and
230+
group sessions later. Set at creation time only. Up to 50 pairs.
231+
227232
telemetry: Telemetry configuration for the browser session. Set enabled to true to start
228233
capture using VM defaults, or provide browser category settings. If omitted,
229234
null, set to an empty object ({}), set to enabled: false without browser
@@ -272,6 +277,7 @@ def create(
272277
"proxy_id": proxy_id,
273278
"start_url": start_url,
274279
"stealth": stealth,
280+
"tags": tags,
275281
"telemetry": telemetry,
276282
"timeout_seconds": timeout_seconds,
277283
"viewport": viewport,
@@ -399,6 +405,7 @@ def list(
399405
offset: int | Omit = omit,
400406
query: str | Omit = omit,
401407
status: Literal["active", "deleted", "all"] | Omit = omit,
408+
tags: Dict[str, str] | Omit = omit,
402409
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
403410
# The extra values given here take precedence over values defined on the client or passed to this method.
404411
extra_headers: Headers | None = None,
@@ -424,6 +431,10 @@ def list(
424431
status: Filter sessions by status. "active" returns only active sessions (default),
425432
"deleted" returns only soft-deleted sessions, "all" returns both.
426433
434+
tags: Filter sessions by tag key-value pairs using deepObject style, e.g.
435+
?tags[team]=backend&tags[env]=staging. Multiple pairs are ANDed: a session must
436+
match every supplied pair exactly.
437+
427438
extra_headers: Send extra headers
428439
429440
extra_query: Add additional query parameters to the request
@@ -447,6 +458,7 @@ def list(
447458
"offset": offset,
448459
"query": query,
449460
"status": status,
461+
"tags": tags,
450462
},
451463
browser_list_params.BrowserListParams,
452464
),
@@ -728,6 +740,7 @@ async def create(
728740
proxy_id: str | Omit = omit,
729741
start_url: str | Omit = omit,
730742
stealth: bool | Omit = omit,
743+
tags: TagsParam | Omit = omit,
731744
telemetry: Optional[browser_create_params.Telemetry] | Omit = omit,
732745
timeout_seconds: int | Omit = omit,
733746
viewport: BrowserViewport | Omit = omit,
@@ -778,6 +791,9 @@ async def create(
778791
stealth: If true, launches the browser in stealth mode to reduce detection by anti-bot
779792
mechanisms.
780793
794+
tags: Optional user-defined key-value tags for the browser session, used to find and
795+
group sessions later. Set at creation time only. Up to 50 pairs.
796+
781797
telemetry: Telemetry configuration for the browser session. Set enabled to true to start
782798
capture using VM defaults, or provide browser category settings. If omitted,
783799
null, set to an empty object ({}), set to enabled: false without browser
@@ -826,6 +842,7 @@ async def create(
826842
"proxy_id": proxy_id,
827843
"start_url": start_url,
828844
"stealth": stealth,
845+
"tags": tags,
829846
"telemetry": telemetry,
830847
"timeout_seconds": timeout_seconds,
831848
"viewport": viewport,
@@ -953,6 +970,7 @@ def list(
953970
offset: int | Omit = omit,
954971
query: str | Omit = omit,
955972
status: Literal["active", "deleted", "all"] | Omit = omit,
973+
tags: Dict[str, str] | Omit = omit,
956974
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
957975
# The extra values given here take precedence over values defined on the client or passed to this method.
958976
extra_headers: Headers | None = None,
@@ -978,6 +996,10 @@ def list(
978996
status: Filter sessions by status. "active" returns only active sessions (default),
979997
"deleted" returns only soft-deleted sessions, "all" returns both.
980998
999+
tags: Filter sessions by tag key-value pairs using deepObject style, e.g.
1000+
?tags[team]=backend&tags[env]=staging. Multiple pairs are ANDed: a session must
1001+
match every supplied pair exactly.
1002+
9811003
extra_headers: Send extra headers
9821004
9831005
extra_query: Add additional query parameters to the request
@@ -1001,6 +1023,7 @@ def list(
10011023
"offset": offset,
10021024
"query": query,
10031025
"status": status,
1026+
"tags": tags,
10041027
},
10051028
browser_list_params.BrowserListParams,
10061029
),

src/kernel/types/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from . import browsers
66
from .. import _compat
7+
from .tags import Tags as Tags
78
from .shared import (
89
LogEvent as LogEvent,
910
AppAction as AppAction,
@@ -19,6 +20,7 @@
1920
from .profile import Profile as Profile
2021
from .project import Project as Project
2122
from .credential import Credential as Credential
23+
from .tags_param import TagsParam as TagsParam
2224
from .browser_pool import BrowserPool as BrowserPool
2325
from .browser_usage import BrowserUsage as BrowserUsage
2426
from .app_list_params import AppListParams as AppListParams

src/kernel/types/browser_create_params.py

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

8+
from .tags_param import TagsParam
89
from .shared_params.browser_profile import BrowserProfile
910
from .shared_params.browser_viewport import BrowserViewport
1011
from .shared_params.browser_extension import BrowserExtension
@@ -82,6 +83,12 @@ class BrowserCreateParams(TypedDict, total=False):
8283
mechanisms.
8384
"""
8485

86+
tags: TagsParam
87+
"""
88+
Optional user-defined key-value tags for the browser session, used to find and
89+
group sessions later. Set at creation time only. Up to 50 pairs.
90+
"""
91+
8592
telemetry: Optional[Telemetry]
8693
"""Telemetry configuration for the browser session.
8794

src/kernel/types/browser_create_response.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from typing import Dict, Optional
44
from datetime import datetime
55

6+
from .tags import Tags
67
from .profile import Profile
78
from .._models import BaseModel
89
from .browser_usage import BrowserUsage
@@ -84,6 +85,12 @@ class BrowserCreateResponse(BaseModel):
8485
browser actually loaded.
8586
"""
8687

88+
tags: Optional[Tags] = None
89+
"""User-defined key-value tags that were set on this browser session, if any.
90+
91+
Echoed back when present.
92+
"""
93+
8794
telemetry: Optional[BrowserTelemetryConfig] = None
8895
"""Active telemetry configuration for the session, if any."""
8996

src/kernel/types/browser_list_params.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from __future__ import annotations
44

5+
from typing import Dict
56
from typing_extensions import Literal, TypedDict
67

78
__all__ = ["BrowserListParams"]
@@ -30,3 +31,10 @@ class BrowserListParams(TypedDict, total=False):
3031
"active" returns only active sessions (default), "deleted" returns only
3132
soft-deleted sessions, "all" returns both.
3233
"""
34+
35+
tags: Dict[str, str]
36+
"""Filter sessions by tag key-value pairs using deepObject style, e.g.
37+
38+
?tags[team]=backend&tags[env]=staging. Multiple pairs are ANDed: a session must
39+
match every supplied pair exactly.
40+
"""

src/kernel/types/browser_list_response.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from typing import Dict, Optional
44
from datetime import datetime
55

6+
from .tags import Tags
67
from .profile import Profile
78
from .._models import BaseModel
89
from .browser_usage import BrowserUsage
@@ -84,6 +85,12 @@ class BrowserListResponse(BaseModel):
8485
browser actually loaded.
8586
"""
8687

88+
tags: Optional[Tags] = None
89+
"""User-defined key-value tags that were set on this browser session, if any.
90+
91+
Echoed back when present.
92+
"""
93+
8794
telemetry: Optional[BrowserTelemetryConfig] = None
8895
"""Active telemetry configuration for the session, if any."""
8996

src/kernel/types/browser_pool_acquire_response.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from typing import Dict, Optional
44
from datetime import datetime
55

6+
from .tags import Tags
67
from .profile import Profile
78
from .._models import BaseModel
89
from .browser_usage import BrowserUsage
@@ -84,6 +85,12 @@ class BrowserPoolAcquireResponse(BaseModel):
8485
browser actually loaded.
8586
"""
8687

88+
tags: Optional[Tags] = None
89+
"""User-defined key-value tags that were set on this browser session, if any.
90+
91+
Echoed back when present.
92+
"""
93+
8794
telemetry: Optional[BrowserTelemetryConfig] = None
8895
"""Active telemetry configuration for the session, if any."""
8996

src/kernel/types/browser_retrieve_response.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from typing import Dict, Optional
44
from datetime import datetime
55

6+
from .tags import Tags
67
from .profile import Profile
78
from .._models import BaseModel
89
from .browser_usage import BrowserUsage
@@ -84,6 +85,12 @@ class BrowserRetrieveResponse(BaseModel):
8485
browser actually loaded.
8586
"""
8687

88+
tags: Optional[Tags] = None
89+
"""User-defined key-value tags that were set on this browser session, if any.
90+
91+
Echoed back when present.
92+
"""
93+
8794
telemetry: Optional[BrowserTelemetryConfig] = None
8895
"""Active telemetry configuration for the session, if any."""
8996

0 commit comments

Comments
 (0)