Skip to content

Commit e618e48

Browse files
committed
fix: address PR review feedback - use SDKNetworkPolicyUpdateParams and rename test IDs
- Use SDKNetworkPolicyUpdateParams in update methods for both sync and async NetworkPolicy classes - Rename network policy test IDs from npo_123 to np_123 across all test files - Update test expectations to match new parameter unpacking behavior Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 90e389d commit e618e48

7 files changed

Lines changed: 47 additions & 109 deletions

File tree

src/runloop_api_client/sdk/async_network_policy.py

Lines changed: 4 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22

33
from __future__ import annotations
44

5-
from typing import Optional
65
from typing_extensions import Unpack, override
76

8-
from ._types import BaseRequestOptions, LongRequestOptions
9-
from .._types import SequenceNotStr
7+
from ._types import BaseRequestOptions, LongRequestOptions, SDKNetworkPolicyUpdateParams
108
from .._client import AsyncRunloop
119
from ..types.network_policy_view import NetworkPolicyView
1210

@@ -57,41 +55,14 @@ async def get_info(
5755
**options,
5856
)
5957

60-
async def update(
61-
self,
62-
*,
63-
allow_all: Optional[bool] = None,
64-
allow_devbox_to_devbox: Optional[bool] = None,
65-
allowed_hostnames: Optional[SequenceNotStr[str]] = None,
66-
description: Optional[str] = None,
67-
name: Optional[str] = None,
68-
**options: Unpack[LongRequestOptions],
69-
) -> NetworkPolicyView:
58+
async def update(self, **params: Unpack[SDKNetworkPolicyUpdateParams]) -> NetworkPolicyView:
7059
"""Update the network policy.
7160
72-
:param allow_all: If true, all egress traffic is allowed (ALLOW_ALL policy)
73-
:type allow_all: Optional[bool]
74-
:param allow_devbox_to_devbox: If true, allows traffic between devboxes via tunnels
75-
:type allow_devbox_to_devbox: Optional[bool]
76-
:param allowed_hostnames: DNS-based allow list with wildcard support
77-
:type allowed_hostnames: Optional[SequenceNotStr[str]]
78-
:param description: Updated description for the NetworkPolicy
79-
:type description: Optional[str]
80-
:param name: Updated human-readable name for the NetworkPolicy
81-
:type name: Optional[str]
82-
:param options: Optional long-running request configuration
61+
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKNetworkPolicyUpdateParams` for available parameters
8362
:return: Updated network policy view
8463
:rtype: NetworkPolicyView
8564
"""
86-
return await self._client.network_policies.update(
87-
self._id,
88-
allow_all=allow_all,
89-
allow_devbox_to_devbox=allow_devbox_to_devbox,
90-
allowed_hostnames=allowed_hostnames,
91-
description=description,
92-
name=name,
93-
**options,
94-
)
65+
return await self._client.network_policies.update(self._id, **params)
9566

9667
async def delete(
9768
self,

src/runloop_api_client/sdk/network_policy.py

Lines changed: 4 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22

33
from __future__ import annotations
44

5-
from typing import Optional
65
from typing_extensions import Unpack, override
76

8-
from ._types import BaseRequestOptions, LongRequestOptions
9-
from .._types import SequenceNotStr
7+
from ._types import BaseRequestOptions, LongRequestOptions, SDKNetworkPolicyUpdateParams
108
from .._client import Runloop
119
from ..types.network_policy_view import NetworkPolicyView
1210

@@ -57,41 +55,14 @@ def get_info(
5755
**options,
5856
)
5957

60-
def update(
61-
self,
62-
*,
63-
allow_all: Optional[bool] = None,
64-
allow_devbox_to_devbox: Optional[bool] = None,
65-
allowed_hostnames: Optional[SequenceNotStr[str]] = None,
66-
description: Optional[str] = None,
67-
name: Optional[str] = None,
68-
**options: Unpack[LongRequestOptions],
69-
) -> NetworkPolicyView:
58+
def update(self, **params: Unpack[SDKNetworkPolicyUpdateParams]) -> NetworkPolicyView:
7059
"""Update the network policy.
7160
72-
:param allow_all: If true, all egress traffic is allowed (ALLOW_ALL policy)
73-
:type allow_all: Optional[bool]
74-
:param allow_devbox_to_devbox: If true, allows traffic between devboxes via tunnels
75-
:type allow_devbox_to_devbox: Optional[bool]
76-
:param allowed_hostnames: DNS-based allow list with wildcard support
77-
:type allowed_hostnames: Optional[SequenceNotStr[str]]
78-
:param description: Updated description for the NetworkPolicy
79-
:type description: Optional[str]
80-
:param name: Updated human-readable name for the NetworkPolicy
81-
:type name: Optional[str]
82-
:param options: Optional long-running request configuration
61+
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKNetworkPolicyUpdateParams` for available parameters
8362
:return: Updated network policy view
8463
:rtype: NetworkPolicyView
8564
"""
86-
return self._client.network_policies.update(
87-
self._id,
88-
allow_all=allow_all,
89-
allow_devbox_to_devbox=allow_devbox_to_devbox,
90-
allowed_hostnames=allowed_hostnames,
91-
description=description,
92-
name=name,
93-
**options,
94-
)
65+
return self._client.network_policies.update(self._id, **params)
9566

9667
def delete(
9768
self,

tests/sdk/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"scenario_run": "scr_123",
2828
"benchmark": "bmd_123",
2929
"benchmark_run": "bmr_123",
30-
"network_policy": "npo_123",
30+
"network_policy": "np_123",
3131
}
3232

3333
# Test URL constants

tests/sdk/test_async_network_policy.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,20 @@ class TestAsyncNetworkPolicy:
1515

1616
def test_init(self, mock_async_client: AsyncMock) -> None:
1717
"""Test AsyncNetworkPolicy initialization."""
18-
network_policy = AsyncNetworkPolicy(mock_async_client, "npo_123")
19-
assert network_policy.id == "npo_123"
18+
network_policy = AsyncNetworkPolicy(mock_async_client, "np_123")
19+
assert network_policy.id == "np_123"
2020

2121
def test_repr(self, mock_async_client: AsyncMock) -> None:
2222
"""Test AsyncNetworkPolicy string representation."""
23-
network_policy = AsyncNetworkPolicy(mock_async_client, "npo_123")
24-
assert repr(network_policy) == "<AsyncNetworkPolicy id='npo_123'>"
23+
network_policy = AsyncNetworkPolicy(mock_async_client, "np_123")
24+
assert repr(network_policy) == "<AsyncNetworkPolicy id='np_123'>"
2525

2626
@pytest.mark.asyncio
2727
async def test_get_info(self, mock_async_client: AsyncMock, network_policy_view: MockNetworkPolicyView) -> None:
2828
"""Test get_info method."""
2929
mock_async_client.network_policies.retrieve = AsyncMock(return_value=network_policy_view)
3030

31-
network_policy = AsyncNetworkPolicy(mock_async_client, "npo_123")
31+
network_policy = AsyncNetworkPolicy(mock_async_client, "np_123")
3232
result = await network_policy.get_info(
3333
extra_headers={"X-Custom": "value"},
3434
extra_query={"param": "value"},
@@ -44,7 +44,7 @@ async def test_update(self, mock_async_client: AsyncMock, network_policy_view: M
4444
"""Test update method."""
4545
mock_async_client.network_policies.update = AsyncMock(return_value=network_policy_view)
4646

47-
network_policy = AsyncNetworkPolicy(mock_async_client, "npo_123")
47+
network_policy = AsyncNetworkPolicy(mock_async_client, "np_123")
4848
result = await network_policy.update(
4949
name="updated-policy",
5050
description="Updated description",
@@ -65,7 +65,7 @@ async def test_update_partial(
6565
"""Test update method with partial fields."""
6666
mock_async_client.network_policies.update = AsyncMock(return_value=network_policy_view)
6767

68-
network_policy = AsyncNetworkPolicy(mock_async_client, "npo_123")
68+
network_policy = AsyncNetworkPolicy(mock_async_client, "np_123")
6969
result = await network_policy.update(
7070
name="renamed-policy",
7171
)
@@ -78,7 +78,7 @@ async def test_delete(self, mock_async_client: AsyncMock, network_policy_view: M
7878
"""Test delete method."""
7979
mock_async_client.network_policies.delete = AsyncMock(return_value=network_policy_view)
8080

81-
network_policy = AsyncNetworkPolicy(mock_async_client, "npo_123")
81+
network_policy = AsyncNetworkPolicy(mock_async_client, "np_123")
8282
result = await network_policy.delete(
8383
extra_headers={"X-Custom": "value"},
8484
extra_query={"param": "value"},

tests/sdk/test_async_ops.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,16 +1277,16 @@ async def test_create(self, mock_async_client: AsyncMock, network_policy_view: M
12771277
)
12781278

12791279
assert isinstance(network_policy, AsyncNetworkPolicy)
1280-
assert network_policy.id == "npo_123"
1280+
assert network_policy.id == "np_123"
12811281
mock_async_client.network_policies.create.assert_awaited_once()
12821282

12831283
def test_from_id(self, mock_async_client: AsyncMock) -> None:
12841284
"""Test from_id method."""
12851285
ops = AsyncNetworkPolicyOps(mock_async_client)
1286-
network_policy = ops.from_id("npo_123")
1286+
network_policy = ops.from_id("np_123")
12871287

12881288
assert isinstance(network_policy, AsyncNetworkPolicy)
1289-
assert network_policy.id == "npo_123"
1289+
assert network_policy.id == "np_123"
12901290

12911291
@pytest.mark.asyncio
12921292
async def test_list_empty(self, mock_async_client: AsyncMock) -> None:
@@ -1315,18 +1315,18 @@ async def async_iter():
13151315
ops = AsyncNetworkPolicyOps(mock_async_client)
13161316
network_policies = await ops.list(
13171317
limit=10,
1318-
starting_after="npo_000",
1318+
starting_after="np_000",
13191319
)
13201320

13211321
assert len(network_policies) == 1
13221322
assert isinstance(network_policies[0], AsyncNetworkPolicy)
1323-
assert network_policies[0].id == "npo_123"
1323+
assert network_policies[0].id == "np_123"
13241324

13251325
@pytest.mark.asyncio
13261326
async def test_list_multiple(self, mock_async_client: AsyncMock) -> None:
13271327
"""Test list method with multiple results."""
1328-
network_policy_view1 = MockNetworkPolicyView(id="npo_001", name="policy-1")
1329-
network_policy_view2 = MockNetworkPolicyView(id="npo_002", name="policy-2")
1328+
network_policy_view1 = MockNetworkPolicyView(id="np_001", name="policy-1")
1329+
network_policy_view2 = MockNetworkPolicyView(id="np_002", name="policy-2")
13301330

13311331
async def async_iter():
13321332
yield network_policy_view1
@@ -1340,8 +1340,8 @@ async def async_iter():
13401340
assert len(network_policies) == 2
13411341
assert isinstance(network_policies[0], AsyncNetworkPolicy)
13421342
assert isinstance(network_policies[1], AsyncNetworkPolicy)
1343-
assert network_policies[0].id == "npo_001"
1344-
assert network_policies[1].id == "npo_002"
1343+
assert network_policies[0].id == "np_001"
1344+
assert network_policies[1].id == "np_002"
13451345

13461346

13471347
class TestAsyncRunloopSDK:

tests/sdk/test_network_policy.py

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,19 @@ class TestNetworkPolicy:
1313

1414
def test_init(self, mock_client: Mock) -> None:
1515
"""Test NetworkPolicy initialization."""
16-
network_policy = NetworkPolicy(mock_client, "npo_123")
17-
assert network_policy.id == "npo_123"
16+
network_policy = NetworkPolicy(mock_client, "np_123")
17+
assert network_policy.id == "np_123"
1818

1919
def test_repr(self, mock_client: Mock) -> None:
2020
"""Test NetworkPolicy string representation."""
21-
network_policy = NetworkPolicy(mock_client, "npo_123")
22-
assert repr(network_policy) == "<NetworkPolicy id='npo_123'>"
21+
network_policy = NetworkPolicy(mock_client, "np_123")
22+
assert repr(network_policy) == "<NetworkPolicy id='np_123'>"
2323

2424
def test_get_info(self, mock_client: Mock, network_policy_view: MockNetworkPolicyView) -> None:
2525
"""Test get_info method."""
2626
mock_client.network_policies.retrieve.return_value = network_policy_view
2727

28-
network_policy = NetworkPolicy(mock_client, "npo_123")
28+
network_policy = NetworkPolicy(mock_client, "np_123")
2929
result = network_policy.get_info(
3030
extra_headers={"X-Custom": "value"},
3131
extra_query={"param": "value"},
@@ -35,7 +35,7 @@ def test_get_info(self, mock_client: Mock, network_policy_view: MockNetworkPolic
3535

3636
assert result == network_policy_view
3737
mock_client.network_policies.retrieve.assert_called_once_with(
38-
"npo_123",
38+
"np_123",
3939
extra_headers={"X-Custom": "value"},
4040
extra_query={"param": "value"},
4141
extra_body={"key": "value"},
@@ -46,7 +46,7 @@ def test_update(self, mock_client: Mock, network_policy_view: MockNetworkPolicyV
4646
"""Test update method."""
4747
mock_client.network_policies.update.return_value = network_policy_view
4848

49-
network_policy = NetworkPolicy(mock_client, "npo_123")
49+
network_policy = NetworkPolicy(mock_client, "np_123")
5050
result = network_policy.update(
5151
name="updated-policy",
5252
description="Updated description",
@@ -59,7 +59,7 @@ def test_update(self, mock_client: Mock, network_policy_view: MockNetworkPolicyV
5959

6060
assert result == network_policy_view
6161
mock_client.network_policies.update.assert_called_once_with(
62-
"npo_123",
62+
"np_123",
6363
allow_all=False,
6464
allow_devbox_to_devbox=True,
6565
allowed_hostnames=["api.openai.com"],
@@ -73,26 +73,22 @@ def test_update_partial(self, mock_client: Mock, network_policy_view: MockNetwor
7373
"""Test update method with partial fields."""
7474
mock_client.network_policies.update.return_value = network_policy_view
7575

76-
network_policy = NetworkPolicy(mock_client, "npo_123")
76+
network_policy = NetworkPolicy(mock_client, "np_123")
7777
result = network_policy.update(
7878
name="renamed-policy",
7979
)
8080

8181
assert result == network_policy_view
8282
mock_client.network_policies.update.assert_called_once_with(
83-
"npo_123",
84-
allow_all=None,
85-
allow_devbox_to_devbox=None,
86-
allowed_hostnames=None,
87-
description=None,
83+
"np_123",
8884
name="renamed-policy",
8985
)
9086

9187
def test_delete(self, mock_client: Mock, network_policy_view: MockNetworkPolicyView) -> None:
9288
"""Test delete method."""
9389
mock_client.network_policies.delete.return_value = network_policy_view
9490

95-
network_policy = NetworkPolicy(mock_client, "npo_123")
91+
network_policy = NetworkPolicy(mock_client, "np_123")
9692
result = network_policy.delete(
9793
extra_headers={"X-Custom": "value"},
9894
extra_query={"param": "value"},
@@ -102,7 +98,7 @@ def test_delete(self, mock_client: Mock, network_policy_view: MockNetworkPolicyV
10298

10399
assert result == network_policy_view
104100
mock_client.network_policies.delete.assert_called_once_with(
105-
"npo_123",
101+
"np_123",
106102
extra_headers={"X-Custom": "value"},
107103
extra_query={"param": "value"},
108104
extra_body={"key": "value"},

tests/sdk/test_ops.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,16 +1169,16 @@ def test_create(self, mock_client: Mock, network_policy_view: MockNetworkPolicyV
11691169
)
11701170

11711171
assert isinstance(network_policy, NetworkPolicy)
1172-
assert network_policy.id == "npo_123"
1172+
assert network_policy.id == "np_123"
11731173
mock_client.network_policies.create.assert_called_once()
11741174

11751175
def test_from_id(self, mock_client: Mock) -> None:
11761176
"""Test from_id method."""
11771177
ops = NetworkPolicyOps(mock_client)
1178-
network_policy = ops.from_id("npo_123")
1178+
network_policy = ops.from_id("np_123")
11791179

11801180
assert isinstance(network_policy, NetworkPolicy)
1181-
assert network_policy.id == "npo_123"
1181+
assert network_policy.id == "np_123"
11821182

11831183
def test_list_empty(self, mock_client: Mock) -> None:
11841184
"""Test list method with empty results."""
@@ -1197,18 +1197,18 @@ def test_list_single(self, mock_client: Mock, network_policy_view: MockNetworkPo
11971197
ops = NetworkPolicyOps(mock_client)
11981198
network_policies = ops.list(
11991199
limit=10,
1200-
starting_after="npo_000",
1200+
starting_after="np_000",
12011201
)
12021202

12031203
assert len(network_policies) == 1
12041204
assert isinstance(network_policies[0], NetworkPolicy)
1205-
assert network_policies[0].id == "npo_123"
1205+
assert network_policies[0].id == "np_123"
12061206
mock_client.network_policies.list.assert_called_once()
12071207

12081208
def test_list_multiple(self, mock_client: Mock) -> None:
12091209
"""Test list method with multiple results."""
1210-
network_policy_view1 = MockNetworkPolicyView(id="npo_001", name="policy-1")
1211-
network_policy_view2 = MockNetworkPolicyView(id="npo_002", name="policy-2")
1210+
network_policy_view1 = MockNetworkPolicyView(id="np_001", name="policy-1")
1211+
network_policy_view2 = MockNetworkPolicyView(id="np_002", name="policy-2")
12121212
mock_client.network_policies.list.return_value = [network_policy_view1, network_policy_view2]
12131213

12141214
ops = NetworkPolicyOps(mock_client)
@@ -1217,8 +1217,8 @@ def test_list_multiple(self, mock_client: Mock) -> None:
12171217
assert len(network_policies) == 2
12181218
assert isinstance(network_policies[0], NetworkPolicy)
12191219
assert isinstance(network_policies[1], NetworkPolicy)
1220-
assert network_policies[0].id == "npo_001"
1221-
assert network_policies[1].id == "npo_002"
1220+
assert network_policies[0].id == "np_001"
1221+
assert network_policies[1].id == "np_002"
12221222
mock_client.network_policies.list.assert_called_once()
12231223

12241224

0 commit comments

Comments
 (0)