BuildLogFollowResult
@dataclass(frozen=True)
class BuildLogFollowResult()Attributes:
statusstrreasonBuildLogDoneReasonoutput_completeboolcursorstr | None = Noneraw_reasonstr | None = None
BuildLogStateEvent
@dataclass(frozen=True)
class BuildLogStateEvent()Attributes:
statusstrerrorstr | None = Nonedeadlinestr | None = NonetypeLiteral['state'] = 'state'
BuildLogChunkEvent
@dataclass(frozen=True)
class BuildLogChunkEvent()Attributes:
data_base64strstart_offsetstrnext_offsetstrcursorstrtypeLiteral['log'] = 'log'
BuildLogGapEvent
@dataclass(frozen=True)
class BuildLogGapEvent()Attributes:
requested_offsetstrfirst_available_offsetstrdropped_bytesstrcursorstrreasonBuildLogGapReason = 'truncated'typeLiteral['gap'] = 'gap'raw_reasonstr | None = None
BuildLogUnavailableEvent
@dataclass(frozen=True)
class BuildLogUnavailableEvent()Attributes:
reasonstrtypeLiteral['unavailable'] = 'unavailable'
BuildLogSourceChangedEvent
@dataclass(frozen=True)
class BuildLogSourceChangedEvent()Attributes:
reasonstrtypeLiteral['source_changed'] = 'source_changed'
BuildLogDoneEvent
@dataclass(frozen=True)
class BuildLogDoneEvent()Attributes:
resultBuildLogFollowResulttypeLiteral['done'] = 'done'
BuildLogErrorEvent
@dataclass(frozen=True)
class BuildLogErrorEvent()Attributes:
errorstrcodestrretryablebooltrace_idstr | None = NonetypeLiteral['error'] = 'error'
ImageBuilder
@dataclass(frozen=True, slots=True)
class ImageBuilder()ImageBuilder.from_registry
@classmethod
def from_registry(ref: str) -> SelfImageBuilder.from_dockerfile
@classmethod
def from_dockerfile(content: str) -> SelfImageBuilder.pip_install
def pip_install(*packages: str) -> SelfImageBuilder.run_commands
def run_commands(*commands: str) -> SelfImageBuilder.env
@overload
def env(name: str, value: str, /) -> SelfImageBuilder.env
@overload
def env(values: Mapping[str, str], /) -> SelfImageBuilder.workdir
def workdir(path: str, /) -> SelfImageBuilder.build_request_source
def build_request_source() -> tuple[dict[str, str] | None, str | None]ImageBuilder.render_dockerfile
def render_dockerfile() -> strRender the Dockerfile the build request carries.
Byte-identical to TypeScript's ImageBuilder.toDockerfile() for the
same builder: one line per layer, a single trailing newline (a POSIX
text file), no trailing whitespace. The text is the build's content
key, so the two SDKs must agree to the byte or the same build would
dedupe differently across them.
ImageService
class ImageService()Image build/pull/list namespace.
ImageService.__init__
def __init__(transport: AsyncTransport) -> NoneImageService.follow_build_logs
async def follow_build_logs(image_id: str,
*,
on_logs: _LogsCallback,
on_event: Optional[_EventCallback] = None,
cursor: Optional[str] = None,
timeout: Optional[float] = None) -> BuildLogFollowResultObserve a submitted image build. Timeout is in seconds, not execution TTL.
ImageService.build
async def build(builder: ImageBuilder,
/,
*,
name: Optional[str] = None,
idle: Optional[int] = None,
region: Optional[str] = None,
cpu_arch: Optional[str] = None,
timeout: Optional[float] = None) -> ImageBuild (or import) an image from an ImageBuilder declaration.
The builder is the only way to say WHAT to build — ImageBuilder. from_dockerfile(...), .from_registry(...), or the fluent
.run_commands / .env / .workdir chain — in both SDKs
(parity with TypeScript's images.build(builder, options)). name
omitted makes the image anonymous; idle (seconds) is then its
idle-retention window — deleted once that long has passed without a
sandbox being created from it (every create restarts the clock);
omitted ⇒ the server maximum (DAYTONA_ANON_IMAGE_MAX_IDLE).
ImageService.pull
async def pull(image: str,
*,
name: Optional[str] = None,
region: Optional[str] = None,
timeout: Optional[float] = None) -> ImageImageService.get
async def get(image_id: str,
*,
wait: Literal['ready'] | None = None,
timeout: Optional[float] = None) -> ImageImageService.promote
async def promote(image_id: str, name: str) -> ImageName an ANONYMOUS image, making it permanent (PATCH /images/{id}).
Promotion only: an image that already has a name answers 409 — renaming a named image is not offered (sandboxes reference images by id, so a rename would silently relabel every sandbox created from it).
ImageService.delete
async def delete(image_id: str) -> NoneImageService.list
async def list(*,
anonymous: bool | Literal['any'] = False,
sandbox_id: Optional[str] = None,
name: Optional[str] = None,
cursor: Optional[str] = None,
limit: Optional[int] = None) -> ListResult[Image]ImageService.iter
async def iter(*,
anonymous: bool | Literal['any'] = False,
sandbox_id: Optional[str] = None,
name: Optional[str] = None,
cursor: Optional[str] = None,
limit: Optional[int] = None) -> AsyncIterator[Image]ImageRef
@dataclass(frozen=True, slots=True)
class ImageRef()Attributes:
idstrnameOptional[str] = None
Image
@dataclass(frozen=True, slots=True)
class Image()Attributes:
idstrnameOptional[str]statusstrregionstranonymousboolretentionstrvar_classstravailable_inlist[str]originstrcreated_atOptional[str] = NoneerrorOptional[str] = Noneexpires_atOptional[str] = Nonemanifest_nameOptional[str] = NonesourceOptional[JsonValue] = NonebytesOptional[int] = Nonelayer_countOptional[int] = NonecursorOptional[str] = Noneformat_versionOptional[int] = Noneformat_outdatedbool = False
SyncImageService
class SyncImageService()Image build/pull/list namespace.
SyncImageService.__init__
def __init__(impl: ImageService, bridge: SyncBridge) -> NoneSyncImageService.build
def build(builder: ImageBuilder,
/,
*,
name: Optional[str] = None,
idle: Optional[int] = None,
region: Optional[str] = None,
cpu_arch: Optional[str] = None,
timeout: Optional[float] = None) -> ImageBuild (or import) an image from an ImageBuilder declaration.
SyncImageService.delete
def delete(image_id: str) -> NoneSyncImageService.follow_build_logs
def follow_build_logs(image_id: str,
*,
on_logs: _LogsCallback,
on_event: Optional[_EventCallback] = None,
cursor: Optional[str] = None,
timeout: Optional[float] = None) -> BuildLogFollowResultObserve a submitted image build. Timeout is in seconds, not execution TTL.
SyncImageService.get
def get(image_id: str,
*,
wait: Literal['ready'] | None = None,
timeout: Optional[float] = None) -> ImageSyncImageService.iter
def iter(*,
anonymous: bool | Literal['any'] = False,
sandbox_id: Optional[str] = None,
name: Optional[str] = None,
cursor: Optional[str] = None,
limit: Optional[int] = None) -> Iterator[Image]SyncImageService.list
def list(*,
anonymous: bool | Literal['any'] = False,
sandbox_id: Optional[str] = None,
name: Optional[str] = None,
cursor: Optional[str] = None,
limit: Optional[int] = None) -> ListResult[Image]SyncImageService.promote
def promote(image_id: str, name: str) -> ImageName an ANONYMOUS image, making it permanent (PATCH /images/{id}).
SyncImageService.pull
def pull(image: str,
*,
name: Optional[str] = None,
region: Optional[str] = None,
timeout: Optional[float] = None) -> ImageBuildLogDoneReason
BuildLogDoneReason = Literal['terminal', 'deadline', 'not_applicable', 'resource_deleted', 'unknown']BuildLogGapReason
BuildLogGapReason = Literal['truncated', 'unknown']BuildLogEvent
BuildLogEvent = BuildLogStateEvent | BuildLogChunkEvent | BuildLogGapEvent | BuildLogUnavailableEvent | BuildLogSourceChangedEvent | BuildLogDoneEvent | BuildLogErrorEventImageBuildResponse
ImageBuildResponse = _gen.api.CreateImageRespImageJob
ImageJob = ImageBuildResponseImageDto
ImageDto = _gen.api.ImagePageRow