From 9a0e4ef589efce5e425ca816e421a40b17260823 Mon Sep 17 00:00:00 2001 From: steven-passynkov Date: Tue, 14 Apr 2026 15:37:47 -0400 Subject: [PATCH] rename sandbox fields --- leap0/_async/client.py | 4 ++-- leap0/_async/sandbox.py | 14 +++++++------- leap0/_async/snapshots.py | 6 +++--- leap0/_schemas/sandbox.py | 10 ++++++---- leap0/_schemas/snapshot.py | 4 ++-- leap0/_sync/client.py | 4 ++-- leap0/_sync/sandbox.py | 14 +++++++------- leap0/_sync/snapshots.py | 6 +++--- leap0/models/config.py | 2 +- leap0/models/sandbox.py | 34 +++++++++++++++++++--------------- leap0/models/snapshot.py | 14 +++++++------- tests/_async/test_sandboxes.py | 18 +++++++++--------- tests/_async/test_snapshots.py | 4 ++-- tests/_sync/test_sandboxes.py | 34 +++++++++++++++++----------------- tests/_sync/test_snapshots.py | 4 ++-- tests/models/test_sandbox.py | 12 ++++++------ tests/models/test_snapshot.py | 2 +- 17 files changed, 96 insertions(+), 90 deletions(-) diff --git a/leap0/_async/client.py b/leap0/_async/client.py index 1db6548..2c9d878 100644 --- a/leap0/_async/client.py +++ b/leap0/_async/client.py @@ -28,7 +28,7 @@ DEFAULT_MEMORY_MIB, DEFAULT_SANDBOX_DOMAIN, DEFAULT_TEMPLATE_NAME, - DEFAULT_TIMEOUT_MIN, + DEFAULT_TIMEOUT, DEFAULT_VCPU, Leap0Config, ) @@ -86,7 +86,7 @@ class AsyncLeap0Client: DEFAULT_DESKTOP_TEMPLATE_NAME = DEFAULT_DESKTOP_TEMPLATE_NAME DEFAULT_VCPU = DEFAULT_VCPU DEFAULT_MEMORY_MIB = DEFAULT_MEMORY_MIB - DEFAULT_TIMEOUT_MIN = DEFAULT_TIMEOUT_MIN + DEFAULT_TIMEOUT = DEFAULT_TIMEOUT _tracer_provider: TracerProvider | None = None _meter_provider: MeterProvider | None = None diff --git a/leap0/_async/sandbox.py b/leap0/_async/sandbox.py index 8e35406..757d7e6 100644 --- a/leap0/_async/sandbox.py +++ b/leap0/_async/sandbox.py @@ -10,7 +10,7 @@ from ..models.config import ( DEFAULT_MEMORY_MIB, DEFAULT_TEMPLATE_NAME, - DEFAULT_TIMEOUT_MIN, + DEFAULT_TIMEOUT, DEFAULT_VCPU, ) from ..models.sandbox import ( @@ -231,8 +231,8 @@ async def create( *, template_name: str = DEFAULT_TEMPLATE_NAME, vcpu: int = DEFAULT_VCPU, - memory_mib: int = DEFAULT_MEMORY_MIB, - timeout_min: int = DEFAULT_TIMEOUT_MIN, + memory: int = DEFAULT_MEMORY_MIB, + timeout: int = DEFAULT_TIMEOUT, auto_pause: bool = False, otel_export: bool = False, env_vars: dict[str, str] | None = None, @@ -244,8 +244,8 @@ async def create( Args: template_name: Name of the template to use. vcpu: Number of virtual CPUs (1 to 8). - memory_mib: Memory in MiB (512 to 8192, must be even). - timeout_min: Sandbox timeout in minutes (1 to 480). + memory: Memory in MiB (512 to 8192, must be even). + timeout: Sandbox timeout in seconds (1 to 28800). auto_pause: Whether the sandbox should auto-pause on timeout. otel_export: Inject OpenTelemetry exporter environment into the sandbox. Requires ``OTEL_EXPORTER_OTLP_ENDPOINT`` in the local environment and @@ -260,8 +260,8 @@ async def create( params = CreateSandboxParams( template_name=template_name, vcpu=vcpu, - memory_mib=memory_mib, - timeout_min=timeout_min, + memory=memory, + timeout=timeout, auto_pause=auto_pause, otel_export=otel_export, env_vars=_inject_otel_env(env_vars) if otel_export else env_vars, diff --git a/leap0/_async/snapshots.py b/leap0/_async/snapshots.py index b23a170..b9dcf84 100644 --- a/leap0/_async/snapshots.py +++ b/leap0/_async/snapshots.py @@ -145,7 +145,7 @@ async def resume( *, snapshot_name: str, auto_pause: bool = False, - timeout_min: int | None = None, + timeout: int | None = None, network_policy: NetworkPolicyDict | None = None, http_timeout: float | None = None, ) -> AsyncSnapshotSandboxT | Sandbox: @@ -154,7 +154,7 @@ async def resume( Args: snapshot_name: Name of the snapshot to restore. auto_pause: Automatically pause the restored sandbox on timeout. - timeout_min: Sandbox timeout in minutes. + timeout: Sandbox timeout in seconds. network_policy: Override the network policy from the snapshot. http_timeout: Optional HTTP request timeout in seconds for this SDK call. @@ -168,7 +168,7 @@ async def resume( payload = ResumeSnapshotParams( snapshot_name=snapshot_name, auto_pause=auto_pause, - timeout_min=timeout_min, + timeout=timeout, network_policy=network_policy, ).to_payload() data = cast(SandboxCreateResponseDict, await self._transport.request_json( diff --git a/leap0/_schemas/sandbox.py b/leap0/_schemas/sandbox.py index cf59be4..bafd313 100644 --- a/leap0/_schemas/sandbox.py +++ b/leap0/_schemas/sandbox.py @@ -24,8 +24,9 @@ class SandboxCreateResponseDict(TypedDict): id: str template_id: str vcpu: int - memory_mib: int - disk_mib: int + memory: int + disk: int + timeout: int state: SandboxState | str auto_pause: bool created_at: str @@ -36,8 +37,9 @@ class SandboxStatusResponseDict(TypedDict): id: str template_id: str vcpu: int - memory_mib: int - disk_mib: int + memory: int + disk: int + timeout: int state: SandboxState | str auto_pause: bool created_at: str diff --git a/leap0/_schemas/snapshot.py b/leap0/_schemas/snapshot.py index 80a7279..9a3fe1f 100644 --- a/leap0/_schemas/snapshot.py +++ b/leap0/_schemas/snapshot.py @@ -12,8 +12,8 @@ class SnapshotCreateResponseDict(TypedDict, total=False): name: str template_id: str vcpu: int - memory_mib: int - disk_mib: int + memory: int + disk: int state: SandboxState | str created_at: str network_policy: NetworkPolicyDict | None diff --git a/leap0/_sync/client.py b/leap0/_sync/client.py index b534ebd..99e2237 100644 --- a/leap0/_sync/client.py +++ b/leap0/_sync/client.py @@ -22,7 +22,7 @@ DEFAULT_MEMORY_MIB, DEFAULT_SANDBOX_DOMAIN, DEFAULT_TEMPLATE_NAME, - DEFAULT_TIMEOUT_MIN, + DEFAULT_TIMEOUT, DEFAULT_VCPU, Leap0Config, ) @@ -69,7 +69,7 @@ class Leap0Client: DEFAULT_DESKTOP_TEMPLATE_NAME = DEFAULT_DESKTOP_TEMPLATE_NAME DEFAULT_VCPU = DEFAULT_VCPU DEFAULT_MEMORY_MIB = DEFAULT_MEMORY_MIB - DEFAULT_TIMEOUT_MIN = DEFAULT_TIMEOUT_MIN + DEFAULT_TIMEOUT = DEFAULT_TIMEOUT _tracer_provider: TracerProvider | None = None _meter_provider: MeterProvider | None = None diff --git a/leap0/_sync/sandbox.py b/leap0/_sync/sandbox.py index 11978c3..ceeb3a7 100644 --- a/leap0/_sync/sandbox.py +++ b/leap0/_sync/sandbox.py @@ -9,7 +9,7 @@ from ..models.config import ( DEFAULT_MEMORY_MIB, DEFAULT_TEMPLATE_NAME, - DEFAULT_TIMEOUT_MIN, + DEFAULT_TIMEOUT, DEFAULT_VCPU, ) from ..models.sandbox import ( @@ -232,8 +232,8 @@ def create( *, template_name: str = DEFAULT_TEMPLATE_NAME, vcpu: int = DEFAULT_VCPU, - memory_mib: int = DEFAULT_MEMORY_MIB, - timeout_min: int = DEFAULT_TIMEOUT_MIN, + memory: int = DEFAULT_MEMORY_MIB, + timeout: int = DEFAULT_TIMEOUT, auto_pause: bool = False, otel_export: bool | None = None, telemetry: bool | None = None, @@ -246,8 +246,8 @@ def create( Args: template_name: Name of the template to use. vcpu: Number of virtual CPUs (1 to 8). - memory_mib: Memory in MiB (512 to 8192, must be even). - timeout_min: Sandbox timeout in minutes (1 to 480, default 5). + memory: Memory in MiB (512 to 8192, must be even). + timeout: Sandbox timeout in seconds (1 to 28800, default 300). auto_pause: Automatically pause the sandbox into a snapshot on timeout. otel_export: Inject OpenTelemetry exporter environment into the sandbox. Requires ``OTEL_EXPORTER_OTLP_ENDPOINT`` in the local environment and @@ -265,8 +265,8 @@ def create( params = CreateSandboxParams( template_name=template_name, vcpu=vcpu, - memory_mib=memory_mib, - timeout_min=timeout_min, + memory=memory, + timeout=timeout, auto_pause=auto_pause, otel_export=effective_otel_export, env_vars=_inject_otel_env(env_vars) if effective_otel_export else env_vars, diff --git a/leap0/_sync/snapshots.py b/leap0/_sync/snapshots.py index 10b8a77..d73f1b1 100644 --- a/leap0/_sync/snapshots.py +++ b/leap0/_sync/snapshots.py @@ -145,7 +145,7 @@ def resume( *, snapshot_name: str, auto_pause: bool = False, - timeout_min: int | None = None, + timeout: int | None = None, network_policy: NetworkPolicyDict | None = None, http_timeout: float | None = None, ) -> SnapshotSandboxT | Sandbox: @@ -154,7 +154,7 @@ def resume( Args: snapshot_name: Name of the snapshot to restore. auto_pause: Automatically pause the restored sandbox on timeout. - timeout_min: Sandbox timeout in minutes. + timeout: Sandbox timeout in seconds. network_policy: Override the network policy from the snapshot. http_timeout: Optional HTTP request timeout in seconds for this SDK call. @@ -168,7 +168,7 @@ def resume( payload = ResumeSnapshotParams( snapshot_name=snapshot_name, auto_pause=auto_pause, - timeout_min=timeout_min, + timeout=timeout, network_policy=network_policy, ).to_payload() data = cast(SandboxCreateResponseDict, self._transport.request_json( diff --git a/leap0/models/config.py b/leap0/models/config.py index 5f0f428..221320a 100644 --- a/leap0/models/config.py +++ b/leap0/models/config.py @@ -26,7 +26,7 @@ DEFAULT_MEMORY_MIB = 1024 -DEFAULT_TIMEOUT_MIN = 5 +DEFAULT_TIMEOUT = 300 DEFAULT_CLIENT_TIMEOUT = 300.0 diff --git a/leap0/models/sandbox.py b/leap0/models/sandbox.py index 527eb41..40a962c 100644 --- a/leap0/models/sandbox.py +++ b/leap0/models/sandbox.py @@ -21,7 +21,7 @@ SandboxStatusResponseDict, TransformRuleDict, ) -from .config import DEFAULT_MEMORY_MIB, DEFAULT_TEMPLATE_NAME, DEFAULT_TIMEOUT_MIN, DEFAULT_VCPU +from .config import DEFAULT_MEMORY_MIB, DEFAULT_TEMPLATE_NAME, DEFAULT_TIMEOUT, DEFAULT_VCPU class SandboxState(str, Enum): """Lifecycle states for a sandbox.""" @@ -110,8 +110,8 @@ class CreateSandboxParams(BaseModel): template_name: str = DEFAULT_TEMPLATE_NAME vcpu: int = DEFAULT_VCPU - memory_mib: int = DEFAULT_MEMORY_MIB - timeout_min: int = DEFAULT_TIMEOUT_MIN + memory: int = DEFAULT_MEMORY_MIB + timeout: int = DEFAULT_TIMEOUT auto_pause: bool = False otel_export: bool = False env_vars: dict[str, str] | None = None @@ -126,10 +126,10 @@ def _validate_values(self) -> CreateSandboxParams: raise ValueError("template_name must be at most 64 characters") if not 1 <= self.vcpu <= 8: raise ValueError("vcpu must be between 1 and 8") - if self.memory_mib < 512 or self.memory_mib > 8192 or self.memory_mib % 2 != 0: - raise ValueError("memory_mib must be an even number between 512 and 8192") - if not 1 <= self.timeout_min <= 480: - raise ValueError("timeout_min must be between 1 and 480") + if self.memory < 512 or self.memory > 8192 or self.memory % 2 != 0: + raise ValueError("memory must be an even number between 512 and 8192") + if not 1 <= self.timeout <= 28800: + raise ValueError("timeout must be between 1 and 28800") self.network_policy = _validate_network_policy(self.network_policy) self.template_name = template_name return self @@ -172,8 +172,9 @@ class Sandbox(SandboxHandle): id: str template_id: str = "" vcpu: int = 0 - memory_mib: int = 0 - disk_mib: int = 0 + memory: int = 0 + disk: int = 0 + timeout: int = 0 state: SandboxState | str = SandboxState.STARTING auto_pause: bool = False created_at: str = "" @@ -190,8 +191,9 @@ def from_dict(cls, data: SandboxCreateResponseDict) -> Sandbox: id=sandbox_id, template_id=data.get("template_id", ""), vcpu=int(data.get("vcpu", 0)), - memory_mib=int(data.get("memory_mib", 0)), - disk_mib=int(data.get("disk_mib", 0)), + memory=int(data.get("memory", 0)), + disk=int(data.get("disk", 0)), + timeout=int(data.get("timeout", 0)), state=state, auto_pause=bool(data.get("auto_pause", False)), created_at=data.get("created_at", ""), @@ -204,8 +206,9 @@ class SandboxStatus(SandboxHandle): id: str template_id: str vcpu: int - memory_mib: int - disk_mib: int + memory: int + disk: int + timeout: int state: SandboxState | str auto_pause: bool created_at: str @@ -221,8 +224,9 @@ def from_dict(cls, data: SandboxStatusResponseDict) -> SandboxStatus: id=sandbox_id, template_id=data.get("template_id", ""), vcpu=int(data.get("vcpu", 0)), - memory_mib=int(data.get("memory_mib", 0)), - disk_mib=int(data.get("disk_mib", 0)), + memory=int(data.get("memory", 0)), + disk=int(data.get("disk", 0)), + timeout=int(data.get("timeout", 0)), state=state, auto_pause=bool(data.get("auto_pause", False)), created_at=data.get("created_at", ""), diff --git a/leap0/models/snapshot.py b/leap0/models/snapshot.py index e9da22a..3afb521 100644 --- a/leap0/models/snapshot.py +++ b/leap0/models/snapshot.py @@ -37,7 +37,7 @@ class ResumeSnapshotParams(BaseModel): snapshot_name: str auto_pause: bool = False - timeout_min: int | None = None + timeout: int | None = None network_policy: NetworkPolicyDict | None = None @model_validator(mode="after") @@ -47,8 +47,8 @@ def _validate_values(self) -> ResumeSnapshotParams: raise ValueError("snapshot_name must be a non-empty string") if len(snapshot_name) > 64: raise ValueError("snapshot_name must be at most 64 characters") - if self.timeout_min is not None and not 1 <= self.timeout_min <= 480: - raise ValueError("timeout_min must be between 1 and 480 when provided") + if self.timeout is not None and not 1 <= self.timeout <= 28800: + raise ValueError("timeout must be between 1 and 28800 when provided") self.snapshot_name = snapshot_name return self @@ -69,8 +69,8 @@ class Snapshot: name: str template_id: str = "" vcpu: int = 0 - memory_mib: int = 0 - disk_mib: int = 0 + memory: int = 0 + disk: int = 0 state: SandboxState | str | None = None network_policy: NetworkPolicyDict | None = None created_at: str = "" @@ -94,8 +94,8 @@ def from_dict(cls, data: SnapshotCreateResponseDict) -> Snapshot: name=snapshot_name, template_id=data.get("template_id", ""), vcpu=int(data.get("vcpu", 0)), - memory_mib=int(data.get("memory_mib", 0)), - disk_mib=int(data.get("disk_mib", 0)), + memory=int(data.get("memory", 0)), + disk=int(data.get("disk", 0)), state=_parse_sandbox_state(state) if state is not None else None, network_policy=data.get("network_policy"), created_at=data.get("created_at", ""), diff --git a/tests/_async/test_sandboxes.py b/tests/_async/test_sandboxes.py index eb6677d..26d9b89 100644 --- a/tests/_async/test_sandboxes.py +++ b/tests/_async/test_sandboxes.py @@ -13,10 +13,10 @@ class TestAsyncSandboxesClient: def test_create(self, async_mock_transport): async def run() -> None: async_mock_transport.request_json.return_value = { - "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory_mib": 2048, - "disk_mib": 10240, "state": "starting", "auto_pause": False, "created_at": "", + "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory": 2048, + "disk": 10240, "timeout": 300, "state": "starting", "auto_pause": False, "created_at": "", } - result = await AsyncSandboxesClient(async_mock_transport, sandbox_domain="s.dev").create(template_name="my-tpl", vcpu=2, memory_mib=2048) + result = await AsyncSandboxesClient(async_mock_transport, sandbox_domain="s.dev").create(template_name="my-tpl", vcpu=2, memory=2048) args, kwargs = async_mock_transport.request_json.call_args assert args == ("POST", "/v1/sandbox") assert kwargs["json"]["template_name"] == "my-tpl" @@ -32,8 +32,8 @@ async def run() -> None: ) client = AsyncSandboxesClient(async_mock_transport, sandbox_domain="s.dev", sandbox_factory=lambda data: AsyncSandbox(fake_client, data)) async_mock_transport.request_json.return_value = { - "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory_mib": 2048, - "disk_mib": 10240, "state": "starting", "auto_pause": False, "created_at": "", + "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory": 2048, + "disk": 10240, "timeout": 300, "state": "starting", "auto_pause": False, "created_at": "", } result = await client.create(template_name="my-tpl") assert isinstance(result, AsyncSandbox) @@ -94,8 +94,8 @@ async def run() -> None: monkeypatch.setenv("OTEL_EXPORTER_OTLP_ENDPOINT", "http://collector:4318") monkeypatch.setenv("OTEL_EXPORTER_OTLP_HEADERS", "authorization=token") async_mock_transport.request_json.return_value = { - "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory_mib": 2048, - "disk_mib": 10240, "state": "starting", "auto_pause": False, "created_at": "", + "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory": 2048, + "disk": 10240, "timeout": 300, "state": "starting", "auto_pause": False, "created_at": "", } await AsyncSandboxesClient(async_mock_transport, sandbox_domain="s.dev").create( @@ -125,8 +125,8 @@ async def run() -> None: def test_pause_forwards_http_timeout(self, async_mock_transport): async def run() -> None: async_mock_transport.request_json.return_value = { - "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory_mib": 2048, - "disk_mib": 10240, "state": "paused", "auto_pause": False, "created_at": "", + "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory": 2048, + "disk": 10240, "timeout": 300, "state": "paused", "auto_pause": False, "created_at": "", } await AsyncSandboxesClient(async_mock_transport, sandbox_domain="s.dev").pause( diff --git a/tests/_async/test_snapshots.py b/tests/_async/test_snapshots.py index 8a2cd27..24f6f3f 100644 --- a/tests/_async/test_snapshots.py +++ b/tests/_async/test_snapshots.py @@ -15,7 +15,7 @@ def test_create(self, async_mock_transport): async def run() -> None: async_mock_transport.request_json.return_value = { "id": "snap-1", "name": "s", "template_id": "t", - "vcpu": 1, "memory_mib": 512, "disk_mib": 10240, "network_policy": None, "created_at": "", + "vcpu": 1, "memory": 512, "disk": 10240, "network_policy": None, "created_at": "", } await AsyncSnapshotsClient(async_mock_transport).create("sbx-1", name="my-snap") args, kwargs = async_mock_transport.request_json.call_args @@ -37,7 +37,7 @@ async def run() -> None: async_mock_transport.request_json.return_value = { "items": [{ "id": "snap-1", "name": "snap-a", "template_id": "tpl-1", "vcpu": 2, - "memory_mib": 1024, "disk_mib": 4096, "created_at": "2026-01-01T00:00:00Z", + "memory": 1024, "disk": 4096, "created_at": "2026-01-01T00:00:00Z", }], "total_items": 1, } diff --git a/tests/_sync/test_sandboxes.py b/tests/_sync/test_sandboxes.py index f550ea9..ceed8d2 100644 --- a/tests/_sync/test_sandboxes.py +++ b/tests/_sync/test_sandboxes.py @@ -12,10 +12,10 @@ class TestSandboxesClient: def test_create(self, mock_transport): mock_transport.request_json.return_value = { - "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory_mib": 2048, - "disk_mib": 10240, "state": "starting", "auto_pause": False, "created_at": "", + "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory": 2048, + "disk": 10240, "timeout": 300, "state": "starting", "auto_pause": False, "created_at": "", } - result = SandboxesClient(mock_transport, sandbox_domain="s.dev").create(template_name="my-tpl", vcpu=2, memory_mib=2048) + result = SandboxesClient(mock_transport, sandbox_domain="s.dev").create(template_name="my-tpl", vcpu=2, memory=2048) args, kwargs = mock_transport.request_json.call_args assert args == ("POST", "/v1/sandbox") assert kwargs["json"]["template_name"] == "my-tpl" @@ -23,8 +23,8 @@ def test_create(self, mock_transport): def test_get(self, mock_transport): mock_transport.request_json.return_value = { - "id": "sbx-1", "template_id": "t", "vcpu": 1, "memory_mib": 512, - "disk_mib": 10240, "state": "running", "auto_pause": False, "created_at": "", + "id": "sbx-1", "template_id": "t", "vcpu": 1, "memory": 512, + "disk": 10240, "timeout": 300, "state": "running", "auto_pause": False, "created_at": "", } SandboxesClient(mock_transport, sandbox_domain="s.dev").get("sbx-1") assert mock_transport.request_json.call_args[0][1] == "/v1/sandbox/sbx-1/" @@ -126,8 +126,8 @@ def test_delete_presigned_url(self, mock_transport): def test_accepts_sandbox_object(self, mock_transport): mock_transport.request_json.return_value = { - "id": "sbx-1", "template_id": "t", "vcpu": 1, "memory_mib": 512, - "disk_mib": 10240, "state": "running", "auto_pause": False, "created_at": "", + "id": "sbx-1", "template_id": "t", "vcpu": 1, "memory": 512, + "disk": 10240, "timeout": 300, "state": "running", "auto_pause": False, "created_at": "", } SandboxesClient(mock_transport, sandbox_domain="s.dev").get(Sandbox(id="sbx-obj")) assert "sbx-obj" in mock_transport.request_json.call_args[0][1] @@ -153,8 +153,8 @@ def test_factory_returns_rich_sandbox(self, mock_transport): ) fake_client.sandboxes = client mock_transport.request_json.return_value = { - "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory_mib": 2048, - "disk_mib": 10240, "state": "starting", "auto_pause": False, "created_at": "", + "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory": 2048, + "disk": 10240, "timeout": 300, "state": "starting", "auto_pause": False, "created_at": "", } result = client.create(template_name="my-tpl") @@ -163,15 +163,15 @@ def test_factory_returns_rich_sandbox(self, mock_transport): assert result.id == "sbx-1" def test_create_validates_input(self, mock_transport): - with pytest.raises(Leap0Error, match="memory_mib"): - SandboxesClient(mock_transport, sandbox_domain="s.dev").create(memory_mib=513) + with pytest.raises(Leap0Error, match="memory"): + SandboxesClient(mock_transport, sandbox_domain="s.dev").create(memory=513) def test_create_injects_otel_env_when_enabled(self, mock_transport, monkeypatch): monkeypatch.setenv("OTEL_EXPORTER_OTLP_ENDPOINT", "http://collector:4318") monkeypatch.setenv("OTEL_EXPORTER_OTLP_HEADERS", "authorization=token") mock_transport.request_json.return_value = { - "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory_mib": 2048, - "disk_mib": 10240, "state": "starting", "auto_pause": False, "created_at": "", + "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory": 2048, + "disk": 10240, "timeout": 300, "state": "starting", "auto_pause": False, "created_at": "", } SandboxesClient(mock_transport, sandbox_domain="s.dev").create( @@ -189,8 +189,8 @@ def test_create_injects_otel_env_when_enabled(self, mock_transport, monkeypatch) def test_create_accepts_legacy_telemetry_flag(self, mock_transport, monkeypatch): monkeypatch.setenv("OTEL_EXPORTER_OTLP_ENDPOINT", "http://collector:4318") mock_transport.request_json.return_value = { - "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory_mib": 2048, - "disk_mib": 10240, "state": "starting", "auto_pause": False, "created_at": "", + "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory": 2048, + "disk": 10240, "timeout": 300, "state": "starting", "auto_pause": False, "created_at": "", } SandboxesClient(mock_transport, sandbox_domain="s.dev").create(telemetry=True) @@ -200,8 +200,8 @@ def test_create_accepts_legacy_telemetry_flag(self, mock_transport, monkeypatch) def test_create_prefers_otel_export_over_legacy_telemetry(self, mock_transport, monkeypatch): mock_transport.request_json.return_value = { - "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory_mib": 2048, - "disk_mib": 10240, "state": "starting", "auto_pause": False, "created_at": "", + "id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory": 2048, + "disk": 10240, "timeout": 300, "state": "starting", "auto_pause": False, "created_at": "", } SandboxesClient(mock_transport, sandbox_domain="s.dev").create( diff --git a/tests/_sync/test_snapshots.py b/tests/_sync/test_snapshots.py index 6e2a740..85e24b6 100644 --- a/tests/_sync/test_snapshots.py +++ b/tests/_sync/test_snapshots.py @@ -13,7 +13,7 @@ class TestSnapshotsClient: def test_create(self, mock_transport): mock_transport.request_json.return_value = { "id": "snap-1", "name": "s", "template_id": "t", - "vcpu": 1, "memory_mib": 512, "disk_mib": 10240, "network_policy": None, "created_at": "", + "vcpu": 1, "memory": 512, "disk": 10240, "network_policy": None, "created_at": "", } SnapshotsClient(mock_transport).create("sbx-1", name="my-snap") args, kwargs = mock_transport.request_json.call_args @@ -34,7 +34,7 @@ def test_list(self, mock_transport): mock_transport.request_json.return_value = { "items": [{ "id": "snap-1", "name": "snap-a", "template_id": "tpl-1", "vcpu": 2, - "memory_mib": 1024, "disk_mib": 4096, "created_at": "2026-01-01T00:00:00Z", + "memory": 1024, "disk": 4096, "created_at": "2026-01-01T00:00:00Z", }], "total_items": 1, } diff --git a/tests/models/test_sandbox.py b/tests/models/test_sandbox.py index 01e4002..a446a1e 100644 --- a/tests/models/test_sandbox.py +++ b/tests/models/test_sandbox.py @@ -14,8 +14,8 @@ def test_from_sandbox(self): assert sandbox_id_of(Sandbox(id="sbx-abc")) == "sbx-abc" def test_from_sandbox_status(self): - s = SandboxStatus(id="sbx-xyz", template_id="t", vcpu=1, memory_mib=512, - disk_mib=10240, state="running", auto_pause=False, created_at="") + s = SandboxStatus(id="sbx-xyz", template_id="t", vcpu=1, memory=512, + disk=10240, timeout=300, state="running", auto_pause=False, created_at="") assert sandbox_id_of(s) == "sbx-xyz" def test_rejects_unrelated_object_with_id(self): @@ -28,8 +28,8 @@ class FakeSandbox: class TestSandbox: def test_full_dict(self): - s = Sandbox.from_dict({"id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory_mib": 2048, - "disk_mib": 10240, "state": "running", "auto_pause": True, + s = Sandbox.from_dict({"id": "sbx-1", "template_id": "tpl-1", "vcpu": 2, "memory": 2048, + "disk": 10240, "timeout": 300, "state": "running", "auto_pause": True, "created_at": "2025-01-01", "network_policy": {"mode": "allow-all"}}) assert s.id == "sbx-1" assert s.vcpu == 2 @@ -45,8 +45,8 @@ def test_minimal_dict(self): class TestSandboxStatus: def test_full_dict(self): - s = SandboxStatus.from_dict({"id": "sbx-1", "template_id": "tpl-1", "vcpu": 4, "memory_mib": 4096, - "disk_mib": 10240, "state": "paused", "auto_pause": True, "created_at": "2025-01-01"}) + s = SandboxStatus.from_dict({"id": "sbx-1", "template_id": "tpl-1", "vcpu": 4, "memory": 4096, + "disk": 10240, "timeout": 300, "state": "paused", "auto_pause": True, "created_at": "2025-01-01"}) assert s.state == "paused" assert s.vcpu == 4 diff --git a/tests/models/test_snapshot.py b/tests/models/test_snapshot.py index e7f3455..9b23929 100644 --- a/tests/models/test_snapshot.py +++ b/tests/models/test_snapshot.py @@ -19,7 +19,7 @@ def test_id_field(self): def test_from_dict_full(self): s = Snapshot.from_dict({"id": "snap-1", "name": "my-snap", "template_id": "tpl-1", - "vcpu": 2, "memory_mib": 1024, "disk_mib": 10240, + "vcpu": 2, "memory": 1024, "disk": 10240, "network_policy": {"mode": "deny-all"}, "created_at": "2025-01-01"}) assert s.id == "snap-1" assert s.state is None