Source code for runloop_api_client.sdk.async_snapshot

"""Snapshot resource class for asynchronous operations."""

from __future__ import annotations

from typing_extensions import Unpack, override

from ._types import (
    BaseRequestOptions,
    LongRequestOptions,
    PollingRequestOptions,
    SDKDiskSnapshotUpdateParams,
    SDKDevboxCreateFromImageParams,
)
from .._client import AsyncRunloop
from .async_devbox import AsyncDevbox
from ..types.devbox_snapshot_view import DevboxSnapshotView
from ..types.devboxes.devbox_snapshot_async_status_view import DevboxSnapshotAsyncStatusView


[docs] class AsyncSnapshot: """Async wrapper around snapshot operations.""" def __init__( self, client: AsyncRunloop, snapshot_id: str, ) -> None: """Initialize the wrapper. :param client: Generated AsyncRunloop client :type client: AsyncRunloop :param snapshot_id: Snapshot identifier returned by the API :type snapshot_id: str """ self._client = client self._id = snapshot_id @override def __repr__(self) -> str: return f"<AsyncSnapshot id={self._id!r}>" @property def id(self) -> str: """Return the snapshot identifier. :return: Unique snapshot ID :rtype: str """ return self._id
[docs] async def get_info( self, **options: Unpack[BaseRequestOptions], ) -> DevboxSnapshotAsyncStatusView: """Retrieve the latest snapshot status. :param options: Optional request configuration :return: Snapshot state payload :rtype: DevboxSnapshotAsyncStatusView """ return await self._client.devboxes.disk_snapshots.query_status( self._id, **options, )
[docs] async def update( self, **params: Unpack[SDKDiskSnapshotUpdateParams], ) -> DevboxSnapshotView: """Update snapshot metadata. :param params: See :typeddict:`~runloop_api_client.sdk._types.SDKDiskSnapshotUpdateParams` for available parameters :return: Updated snapshot details :rtype: DevboxSnapshotView """ return await self._client.devboxes.disk_snapshots.update( self._id, **params, )
[docs] async def delete( self, **options: Unpack[LongRequestOptions], ) -> object: """Delete the snapshot. :param options: Optional long-running request configuration :return: API response acknowledging deletion :rtype: object """ return await self._client.devboxes.disk_snapshots.delete( self._id, **options, )
[docs] async def await_completed( self, **options: Unpack[PollingRequestOptions], ) -> DevboxSnapshotAsyncStatusView: """Block until the snapshot operation finishes. :param options: Polling configuration (timeouts, intervals) :return: Final snapshot status :rtype: DevboxSnapshotAsyncStatusView """ return await self._client.devboxes.disk_snapshots.await_completed( self._id, **options, )
[docs] async def create_devbox( self, **params: Unpack[SDKDevboxCreateFromImageParams], ) -> "AsyncDevbox": """Create a devbox restored from this snapshot. :param params: See :typeddict:`~runloop_api_client.sdk._types.SDKDevboxCreateFromImageParams` for available parameters :return: Wrapper bound to the running devbox :rtype: AsyncDevbox """ devbox_view = await self._client.devboxes.create_and_await_running( snapshot_id=self._id, **params, ) return AsyncDevbox(self._client, devbox_view.id)