Skip to content

Commit b1807a2

Browse files
feat: browsers: accept chrome_policy on POST /browsers (KERNEL-1216)
1 parent eec2c4b commit b1807a2

10 files changed

Lines changed: 78 additions & 9 deletions

.stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 112
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-982efd191c23737c9e1cdbcbf9237fa2231b9f74e0a25db2870293bdf9951c21.yml
3-
openapi_spec_hash: eeb27952a4cc939316c24fc0ce2c9e3a
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-e564e74a7aae1744d4aa070a63c387f456c4719a48747dc6229b58a986255b65.yml
3+
openapi_spec_hash: 62beb1f20708652aaee31bbffb6cfbe9
44
config_hash: 08d55086449943a8fec212b870061a3f

src/kernel/resources/browsers/browsers.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ def with_streaming_response(self) -> BrowsersResourceWithStreamingResponse:
152152
def create(
153153
self,
154154
*,
155+
chrome_policy: Dict[str, object] | Omit = omit,
155156
extensions: Iterable[BrowserExtension] | Omit = omit,
156157
gpu: bool | Omit = omit,
157158
headless: bool | Omit = omit,
@@ -175,6 +176,12 @@ def create(
175176
Create a new browser session from within an action.
176177
177178
Args:
179+
chrome_policy: Custom Chrome enterprise policy overrides applied to this browser session. Keys
180+
are Chrome enterprise policy names; values must match their expected types.
181+
Blocked: kernel-managed policies (extensions, proxy, CDP/automation). Ignored
182+
when reusing an existing persistent session. See
183+
https://chromeenterprise.google/policies/
184+
178185
extensions: List of browser extensions to load into the session. Provide each by id or name.
179186
180187
gpu: If true, enables GPU acceleration for the browser session. Requires Start-Up or
@@ -235,6 +242,7 @@ def create(
235242
"/browsers",
236243
body=maybe_transform(
237244
{
245+
"chrome_policy": chrome_policy,
238246
"extensions": extensions,
239247
"gpu": gpu,
240248
"headless": headless,
@@ -716,6 +724,7 @@ def with_streaming_response(self) -> AsyncBrowsersResourceWithStreamingResponse:
716724
async def create(
717725
self,
718726
*,
727+
chrome_policy: Dict[str, object] | Omit = omit,
719728
extensions: Iterable[BrowserExtension] | Omit = omit,
720729
gpu: bool | Omit = omit,
721730
headless: bool | Omit = omit,
@@ -739,6 +748,12 @@ async def create(
739748
Create a new browser session from within an action.
740749
741750
Args:
751+
chrome_policy: Custom Chrome enterprise policy overrides applied to this browser session. Keys
752+
are Chrome enterprise policy names; values must match their expected types.
753+
Blocked: kernel-managed policies (extensions, proxy, CDP/automation). Ignored
754+
when reusing an existing persistent session. See
755+
https://chromeenterprise.google/policies/
756+
742757
extensions: List of browser extensions to load into the session. Provide each by id or name.
743758
744759
gpu: If true, enables GPU acceleration for the browser session. Requires Start-Up or
@@ -799,6 +814,7 @@ async def create(
799814
"/browsers",
800815
body=await async_maybe_transform(
801816
{
817+
"chrome_policy": chrome_policy,
802818
"extensions": extensions,
803819
"gpu": gpu,
804820
"headless": headless,

src/kernel/types/browser_create_params.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from __future__ import annotations
44

5-
from typing import Iterable
5+
from typing import Dict, Iterable
66
from typing_extensions import TypedDict
77

88
from .browser_persistence_param import BrowserPersistenceParam
@@ -14,6 +14,15 @@
1414

1515

1616
class BrowserCreateParams(TypedDict, total=False):
17+
chrome_policy: Dict[str, object]
18+
"""Custom Chrome enterprise policy overrides applied to this browser session.
19+
20+
Keys are Chrome enterprise policy names; values must match their expected types.
21+
Blocked: kernel-managed policies (extensions, proxy, CDP/automation). Ignored
22+
when reusing an existing persistent session. See
23+
https://chromeenterprise.google/policies/
24+
"""
25+
1726
extensions: Iterable[BrowserExtension]
1827
"""List of browser extensions to load into the session.
1928

src/kernel/types/browser_create_response.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 Dict, Optional
44
from datetime import datetime
55

66
from .profile import Profile
@@ -44,6 +44,13 @@ class BrowserCreateResponse(BaseModel):
4444
Only available for non-headless browsers.
4545
"""
4646

47+
chrome_policy: Optional[Dict[str, object]] = None
48+
"""
49+
Custom Chrome enterprise policy overrides that were applied to this browser
50+
session, if any. Echoed back for verification. Keys are Chrome enterprise policy
51+
names.
52+
"""
53+
4754
deleted_at: Optional[datetime] = None
4855
"""When the browser session was soft-deleted. Only present for deleted sessions."""
4956

src/kernel/types/browser_list_response.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 Dict, Optional
44
from datetime import datetime
55

66
from .profile import Profile
@@ -44,6 +44,13 @@ class BrowserListResponse(BaseModel):
4444
Only available for non-headless browsers.
4545
"""
4646

47+
chrome_policy: Optional[Dict[str, object]] = None
48+
"""
49+
Custom Chrome enterprise policy overrides that were applied to this browser
50+
session, if any. Echoed back for verification. Keys are Chrome enterprise policy
51+
names.
52+
"""
53+
4754
deleted_at: Optional[datetime] = None
4855
"""When the browser session was soft-deleted. Only present for deleted sessions."""
4956

src/kernel/types/browser_pool_acquire_response.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 Dict, Optional
44
from datetime import datetime
55

66
from .profile import Profile
@@ -44,6 +44,13 @@ class BrowserPoolAcquireResponse(BaseModel):
4444
Only available for non-headless browsers.
4545
"""
4646

47+
chrome_policy: Optional[Dict[str, object]] = None
48+
"""
49+
Custom Chrome enterprise policy overrides that were applied to this browser
50+
session, if any. Echoed back for verification. Keys are Chrome enterprise policy
51+
names.
52+
"""
53+
4754
deleted_at: Optional[datetime] = None
4855
"""When the browser session was soft-deleted. Only present for deleted sessions."""
4956

src/kernel/types/browser_retrieve_response.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 Dict, Optional
44
from datetime import datetime
55

66
from .profile import Profile
@@ -44,6 +44,13 @@ class BrowserRetrieveResponse(BaseModel):
4444
Only available for non-headless browsers.
4545
"""
4646

47+
chrome_policy: Optional[Dict[str, object]] = None
48+
"""
49+
Custom Chrome enterprise policy overrides that were applied to this browser
50+
session, if any. Echoed back for verification. Keys are Chrome enterprise policy
51+
names.
52+
"""
53+
4754
deleted_at: Optional[datetime] = None
4855
"""When the browser session was soft-deleted. Only present for deleted sessions."""
4956

src/kernel/types/browser_update_response.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 Dict, Optional
44
from datetime import datetime
55

66
from .profile import Profile
@@ -44,6 +44,13 @@ class BrowserUpdateResponse(BaseModel):
4444
Only available for non-headless browsers.
4545
"""
4646

47+
chrome_policy: Optional[Dict[str, object]] = None
48+
"""
49+
Custom Chrome enterprise policy overrides that were applied to this browser
50+
session, if any. Echoed back for verification. Keys are Chrome enterprise policy
51+
names.
52+
"""
53+
4754
deleted_at: Optional[datetime] = None
4855
"""When the browser session was soft-deleted. Only present for deleted sessions."""
4956

src/kernel/types/invocation_list_browsers_response.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 List, Optional
3+
from typing import Dict, List, Optional
44
from datetime import datetime
55

66
from .profile import Profile
@@ -44,6 +44,13 @@ class Browser(BaseModel):
4444
Only available for non-headless browsers.
4545
"""
4646

47+
chrome_policy: Optional[Dict[str, object]] = None
48+
"""
49+
Custom Chrome enterprise policy overrides that were applied to this browser
50+
session, if any. Echoed back for verification. Keys are Chrome enterprise policy
51+
names.
52+
"""
53+
4754
deleted_at: Optional[datetime] = None
4855
"""When the browser session was soft-deleted. Only present for deleted sessions."""
4956

tests/api_resources/test_browsers.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ def test_method_create(self, client: Kernel) -> None:
3636
@parametrize
3737
def test_method_create_with_all_params(self, client: Kernel) -> None:
3838
browser = client.browsers.create(
39+
chrome_policy={"foo": "bar"},
3940
extensions=[
4041
{
4142
"id": "id",
@@ -462,6 +463,7 @@ async def test_method_create(self, async_client: AsyncKernel) -> None:
462463
@parametrize
463464
async def test_method_create_with_all_params(self, async_client: AsyncKernel) -> None:
464465
browser = await async_client.browsers.create(
466+
chrome_policy={"foo": "bar"},
465467
extensions=[
466468
{
467469
"id": "id",

0 commit comments

Comments
 (0)