Skip to content

Commit 2f568e6

Browse files
committed
change manager class suffixes from Client to Ops
1 parent 51a5c74 commit 2f568e6

File tree

5 files changed

+89
-89
lines changed

5 files changed

+89
-89
lines changed

src/runloop_api_client/sdk/__init__.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55

66
from __future__ import annotations
77

8-
from .sync import RunloopSDK, DevboxClient, SnapshotClient, BlueprintClient, StorageObjectClient
8+
from .sync import RunloopSDK, DevboxOps, SnapshotOps, BlueprintOps, StorageObjectOps
99
from .async_ import (
1010
AsyncRunloopSDK,
11-
AsyncDevboxClient,
12-
AsyncSnapshotClient,
13-
AsyncBlueprintClient,
14-
AsyncStorageObjectClient,
11+
AsyncDevboxOps,
12+
AsyncSnapshotOps,
13+
AsyncBlueprintOps,
14+
AsyncStorageObjectOps,
1515
)
1616
from .devbox import Devbox
1717
from .snapshot import Snapshot
@@ -31,14 +31,14 @@
3131
"RunloopSDK",
3232
"AsyncRunloopSDK",
3333
# Management interfaces
34-
"DevboxClient",
35-
"AsyncDevboxClient",
36-
"BlueprintClient",
37-
"AsyncBlueprintClient",
38-
"SnapshotClient",
39-
"AsyncSnapshotClient",
40-
"StorageObjectClient",
41-
"AsyncStorageObjectClient",
34+
"DevboxOps",
35+
"AsyncDevboxOps",
36+
"BlueprintOps",
37+
"AsyncBlueprintOps",
38+
"SnapshotOps",
39+
"AsyncSnapshotOps",
40+
"StorageObjectOps",
41+
"AsyncStorageObjectOps",
4242
# Resource classes
4343
"Devbox",
4444
"AsyncDevbox",

src/runloop_api_client/sdk/async_.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
from ..types.object_create_params import ContentType
3030

3131

32-
class AsyncDevboxClient:
32+
class AsyncDevboxOps:
3333
"""High-level async manager for creating and managing AsyncDevbox instances.
3434
3535
Accessed via ``runloop.devbox`` from :class:`AsyncRunloopSDK`, provides
@@ -156,7 +156,7 @@ async def list(
156156
return [AsyncDevbox(self._client, item.id) for item in page.devboxes]
157157

158158

159-
class AsyncSnapshotClient:
159+
class AsyncSnapshotOps:
160160
"""High-level async manager for working with disk snapshots.
161161
162162
Accessed via ``runloop.snapshot`` from :class:`AsyncRunloopSDK`, provides
@@ -205,7 +205,7 @@ def from_id(self, snapshot_id: str) -> AsyncSnapshot:
205205
return AsyncSnapshot(self._client, snapshot_id)
206206

207207

208-
class AsyncBlueprintClient:
208+
class AsyncBlueprintOps:
209209
"""High-level async manager for creating and managing blueprints.
210210
211211
Accessed via ``runloop.blueprint`` from :class:`AsyncRunloopSDK`, provides
@@ -275,7 +275,7 @@ async def list(
275275
return [AsyncBlueprint(self._client, item.id) for item in page.blueprints]
276276

277277

278-
class AsyncStorageObjectClient:
278+
class AsyncStorageObjectOps:
279279
"""High-level async manager for creating and managing storage objects.
280280
281281
Accessed via ``runloop.storage_object`` from :class:`AsyncRunloopSDK`, provides
@@ -452,10 +452,10 @@ class AsyncRunloopSDK:
452452
"""
453453

454454
api: AsyncRunloop
455-
devbox: AsyncDevboxClient
456-
blueprint: AsyncBlueprintClient
457-
snapshot: AsyncSnapshotClient
458-
storage_object: AsyncStorageObjectClient
455+
devbox: AsyncDevboxOps
456+
blueprint: AsyncBlueprintOps
457+
snapshot: AsyncSnapshotOps
458+
storage_object: AsyncStorageObjectOps
459459

460460
def __init__(
461461
self,
@@ -489,10 +489,10 @@ def __init__(
489489
http_client=http_client,
490490
)
491491

492-
self.devbox = AsyncDevboxClient(self.api)
493-
self.blueprint = AsyncBlueprintClient(self.api)
494-
self.snapshot = AsyncSnapshotClient(self.api)
495-
self.storage_object = AsyncStorageObjectClient(self.api)
492+
self.devbox = AsyncDevboxOps(self.api)
493+
self.blueprint = AsyncBlueprintOps(self.api)
494+
self.snapshot = AsyncSnapshotOps(self.api)
495+
self.storage_object = AsyncStorageObjectOps(self.api)
496496

497497
async def aclose(self) -> None:
498498
"""Close the underlying HTTP client and release resources."""

src/runloop_api_client/sdk/sync.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
from ..types.object_create_params import ContentType
3030

3131

32-
class DevboxClient:
32+
class DevboxOps:
3333
"""High-level manager for creating and managing Devbox instances.
3434
3535
Accessed via ``runloop.devbox`` from :class:`RunloopSDK`, provides methods to
@@ -157,7 +157,7 @@ def list(
157157
return [Devbox(self._client, item.id) for item in page.devboxes]
158158

159159

160-
class SnapshotClient:
160+
class SnapshotOps:
161161
"""High-level manager for working with disk snapshots.
162162
163163
Accessed via ``runloop.snapshot`` from :class:`RunloopSDK`, provides methods
@@ -202,7 +202,7 @@ def from_id(self, snapshot_id: str) -> Snapshot:
202202
return Snapshot(self._client, snapshot_id)
203203

204204

205-
class BlueprintClient:
205+
class BlueprintOps:
206206
"""High-level manager for creating and managing blueprints.
207207
208208
Accessed via ``runloop.blueprint`` from :class:`RunloopSDK`, provides methods
@@ -271,7 +271,7 @@ def list(
271271
return [Blueprint(self._client, item.id) for item in page.blueprints]
272272

273273

274-
class StorageObjectClient:
274+
class StorageObjectOps:
275275
"""High-level manager for creating and managing storage objects.
276276
277277
Accessed via ``runloop.storage_object`` from :class:`RunloopSDK`, provides
@@ -444,10 +444,10 @@ class RunloopSDK:
444444
"""
445445

446446
api: Runloop
447-
devbox: DevboxClient
448-
blueprint: BlueprintClient
449-
snapshot: SnapshotClient
450-
storage_object: StorageObjectClient
447+
devbox: DevboxOps
448+
blueprint: BlueprintOps
449+
snapshot: SnapshotOps
450+
storage_object: StorageObjectOps
451451

452452
def __init__(
453453
self,
@@ -481,10 +481,10 @@ def __init__(
481481
http_client=http_client,
482482
)
483483

484-
self.devbox = DevboxClient(self.api)
485-
self.blueprint = BlueprintClient(self.api)
486-
self.snapshot = SnapshotClient(self.api)
487-
self.storage_object = StorageObjectClient(self.api)
484+
self.devbox = DevboxOps(self.api)
485+
self.blueprint = BlueprintOps(self.api)
486+
self.snapshot = SnapshotOps(self.api)
487+
self.storage_object = StorageObjectOps(self.api)
488488

489489
def close(self) -> None:
490490
"""Close the underlying HTTP client and release resources."""

tests/sdk/test_async_clients.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
from runloop_api_client.sdk import AsyncDevbox, AsyncSnapshot, AsyncBlueprint, AsyncStorageObject
1919
from runloop_api_client.sdk.async_ import (
2020
AsyncRunloopSDK,
21-
AsyncDevboxClient,
22-
AsyncSnapshotClient,
23-
AsyncBlueprintClient,
24-
AsyncStorageObjectClient,
21+
AsyncDevboxOps,
22+
AsyncSnapshotOps,
23+
AsyncBlueprintOps,
24+
AsyncStorageObjectOps,
2525
)
2626
from runloop_api_client.lib.polling import PollingConfig
2727

@@ -34,7 +34,7 @@ async def test_create(self, mock_async_client: AsyncMock, devbox_view: MockDevbo
3434
"""Test create method."""
3535
mock_async_client.devboxes.create_and_await_running = AsyncMock(return_value=devbox_view)
3636

37-
client = AsyncDevboxClient(mock_async_client)
37+
client = AsyncDevboxOps(mock_async_client)
3838
devbox = await client.create(
3939
name="test-devbox",
4040
metadata={"key": "value"},
@@ -50,7 +50,7 @@ async def test_create_from_blueprint_id(self, mock_async_client: AsyncMock, devb
5050
"""Test create_from_blueprint_id method."""
5151
mock_async_client.devboxes.create_and_await_running = AsyncMock(return_value=devbox_view)
5252

53-
client = AsyncDevboxClient(mock_async_client)
53+
client = AsyncDevboxOps(mock_async_client)
5454
devbox = await client.create_from_blueprint_id(
5555
"bp_123",
5656
name="test-devbox",
@@ -65,7 +65,7 @@ async def test_create_from_blueprint_name(self, mock_async_client: AsyncMock, de
6565
"""Test create_from_blueprint_name method."""
6666
mock_async_client.devboxes.create_and_await_running = AsyncMock(return_value=devbox_view)
6767

68-
client = AsyncDevboxClient(mock_async_client)
68+
client = AsyncDevboxOps(mock_async_client)
6969
devbox = await client.create_from_blueprint_name(
7070
"my-blueprint",
7171
name="test-devbox",
@@ -80,7 +80,7 @@ async def test_create_from_snapshot(self, mock_async_client: AsyncMock, devbox_v
8080
"""Test create_from_snapshot method."""
8181
mock_async_client.devboxes.create_and_await_running = AsyncMock(return_value=devbox_view)
8282

83-
client = AsyncDevboxClient(mock_async_client)
83+
client = AsyncDevboxOps(mock_async_client)
8484
devbox = await client.create_from_snapshot(
8585
"snap_123",
8686
name="test-devbox",
@@ -92,7 +92,7 @@ async def test_create_from_snapshot(self, mock_async_client: AsyncMock, devbox_v
9292

9393
def test_from_id(self, mock_async_client: AsyncMock) -> None:
9494
"""Test from_id method."""
95-
client = AsyncDevboxClient(mock_async_client)
95+
client = AsyncDevboxOps(mock_async_client)
9696
devbox = client.from_id("dev_123")
9797

9898
assert isinstance(devbox, AsyncDevbox)
@@ -107,7 +107,7 @@ async def test_list(self, mock_async_client: AsyncMock, devbox_view: MockDevboxV
107107
page = SimpleNamespace(devboxes=[devbox_view])
108108
mock_async_client.devboxes.list = AsyncMock(return_value=page)
109109

110-
client = AsyncDevboxClient(mock_async_client)
110+
client = AsyncDevboxOps(mock_async_client)
111111
devboxes = await client.list(
112112
limit=10,
113113
status="running",
@@ -129,7 +129,7 @@ async def test_list(self, mock_async_client: AsyncMock, snapshot_view: MockSnaps
129129
page = SimpleNamespace(snapshots=[snapshot_view])
130130
mock_async_client.devboxes.disk_snapshots.list = AsyncMock(return_value=page)
131131

132-
client = AsyncSnapshotClient(mock_async_client)
132+
client = AsyncSnapshotOps(mock_async_client)
133133
snapshots = await client.list(
134134
devbox_id="dev_123",
135135
limit=10,
@@ -143,7 +143,7 @@ async def test_list(self, mock_async_client: AsyncMock, snapshot_view: MockSnaps
143143

144144
def test_from_id(self, mock_async_client: AsyncMock) -> None:
145145
"""Test from_id method."""
146-
client = AsyncSnapshotClient(mock_async_client)
146+
client = AsyncSnapshotOps(mock_async_client)
147147
snapshot = client.from_id("snap_123")
148148

149149
assert isinstance(snapshot, AsyncSnapshot)
@@ -158,7 +158,7 @@ async def test_create(self, mock_async_client: AsyncMock, blueprint_view: MockBl
158158
"""Test create method."""
159159
mock_async_client.blueprints.create_and_await_build_complete = AsyncMock(return_value=blueprint_view)
160160

161-
client = AsyncBlueprintClient(mock_async_client)
161+
client = AsyncBlueprintOps(mock_async_client)
162162
blueprint = await client.create(
163163
name="test-blueprint",
164164
polling_config=PollingConfig(timeout_seconds=60.0),
@@ -170,7 +170,7 @@ async def test_create(self, mock_async_client: AsyncMock, blueprint_view: MockBl
170170

171171
def test_from_id(self, mock_async_client: AsyncMock) -> None:
172172
"""Test from_id method."""
173-
client = AsyncBlueprintClient(mock_async_client)
173+
client = AsyncBlueprintOps(mock_async_client)
174174
blueprint = client.from_id("bp_123")
175175

176176
assert isinstance(blueprint, AsyncBlueprint)
@@ -182,7 +182,7 @@ async def test_list(self, mock_async_client: AsyncMock, blueprint_view: MockBlue
182182
page = SimpleNamespace(blueprints=[blueprint_view])
183183
mock_async_client.blueprints.list = AsyncMock(return_value=page)
184184

185-
client = AsyncBlueprintClient(mock_async_client)
185+
client = AsyncBlueprintOps(mock_async_client)
186186
blueprints = await client.list(
187187
limit=10,
188188
name="test",
@@ -203,7 +203,7 @@ async def test_create(self, mock_async_client: AsyncMock, object_view: MockObjec
203203
"""Test create method."""
204204
mock_async_client.objects.create = AsyncMock(return_value=object_view)
205205

206-
client = AsyncStorageObjectClient(mock_async_client)
206+
client = AsyncStorageObjectOps(mock_async_client)
207207
obj = await client.create(name="test.txt", content_type="text", metadata={"key": "value"})
208208

209209
assert isinstance(obj, AsyncStorageObject)
@@ -217,7 +217,7 @@ async def test_create(self, mock_async_client: AsyncMock, object_view: MockObjec
217217

218218
def test_from_id(self, mock_async_client: AsyncMock) -> None:
219219
"""Test from_id method."""
220-
client = AsyncStorageObjectClient(mock_async_client)
220+
client = AsyncStorageObjectOps(mock_async_client)
221221
obj = client.from_id("obj_123")
222222

223223
assert isinstance(obj, AsyncStorageObject)
@@ -230,7 +230,7 @@ async def test_list(self, mock_async_client: AsyncMock, object_view: MockObjectV
230230
page = SimpleNamespace(objects=[object_view])
231231
mock_async_client.objects.list = AsyncMock(return_value=page)
232232

233-
client = AsyncStorageObjectClient(mock_async_client)
233+
client = AsyncStorageObjectOps(mock_async_client)
234234
objects = await client.list(
235235
content_type="text",
236236
limit=10,
@@ -261,7 +261,7 @@ async def test_upload_from_file(
261261
http_client.put = AsyncMock(return_value=mock_response)
262262
mock_async_client._client = http_client
263263

264-
client = AsyncStorageObjectClient(mock_async_client)
264+
client = AsyncStorageObjectOps(mock_async_client)
265265
obj = await client.upload_from_file(temp_file, name="test.txt")
266266

267267
assert isinstance(obj, AsyncStorageObject)
@@ -281,7 +281,7 @@ async def test_upload_from_text(self, mock_async_client: AsyncMock, object_view:
281281
http_client.put = AsyncMock(return_value=mock_response)
282282
mock_async_client._client = http_client
283283

284-
client = AsyncStorageObjectClient(mock_async_client)
284+
client = AsyncStorageObjectOps(mock_async_client)
285285
obj = await client.upload_from_text("test content", "test.txt", metadata={"key": "value"})
286286

287287
assert isinstance(obj, AsyncStorageObject)
@@ -305,7 +305,7 @@ async def test_upload_from_bytes(self, mock_async_client: AsyncMock, object_view
305305
http_client.put = AsyncMock(return_value=mock_response)
306306
mock_async_client._client = http_client
307307

308-
client = AsyncStorageObjectClient(mock_async_client)
308+
client = AsyncStorageObjectOps(mock_async_client)
309309
obj = await client.upload_from_bytes(b"test content", "test.bin", content_type="binary")
310310

311311
assert isinstance(obj, AsyncStorageObject)
@@ -321,7 +321,7 @@ async def test_upload_from_bytes(self, mock_async_client: AsyncMock, object_view
321321
@pytest.mark.asyncio
322322
async def test_upload_from_file_missing_path(self, mock_async_client: AsyncMock, tmp_path: Path) -> None:
323323
"""upload_from_file should raise when file cannot be read."""
324-
client = AsyncStorageObjectClient(mock_async_client)
324+
client = AsyncStorageObjectOps(mock_async_client)
325325
missing_file = tmp_path / "missing.txt"
326326

327327
with pytest.raises(OSError, match="Failed to read file"):
@@ -335,10 +335,10 @@ def test_init(self) -> None:
335335
"""Test AsyncRunloopSDK initialization."""
336336
sdk = AsyncRunloopSDK(bearer_token="test-token")
337337
assert sdk.api is not None
338-
assert isinstance(sdk.devbox, AsyncDevboxClient)
339-
assert isinstance(sdk.snapshot, AsyncSnapshotClient)
340-
assert isinstance(sdk.blueprint, AsyncBlueprintClient)
341-
assert isinstance(sdk.storage_object, AsyncStorageObjectClient)
338+
assert isinstance(sdk.devbox, AsyncDevboxOps)
339+
assert isinstance(sdk.snapshot, AsyncSnapshotOps)
340+
assert isinstance(sdk.blueprint, AsyncBlueprintOps)
341+
assert isinstance(sdk.storage_object, AsyncStorageObjectOps)
342342

343343
@pytest.mark.asyncio
344344
async def test_aclose(self) -> None:

0 commit comments

Comments
 (0)