Source code for contree_sdk.docker.kw_workdir

"""`WORKDIR /path` - set the working directory for subsequent directives."""

from __future__ import annotations

import posixpath
from dataclasses import dataclass
from typing import ClassVar

from .context import AsyncBuildContext, BuildContext
from .keyword import DockerKeyword


[docs] @dataclass(frozen=True, repr=False) class WorkdirKeyword(DockerKeyword): NAME: ClassVar[str] = "WORKDIR" path: str = "" def __repr__(self) -> str: return f"WORKDIR {self.path}"
[docs] @classmethod def parse(cls, args_text: str) -> WorkdirKeyword: raw = args_text.strip() if not raw: raise ValueError("WORKDIR requires a path") return cls(path=raw)
[docs] def serialize(self) -> str: return f"WORKDIR {self.path}"
[docs] def execute(self, ctx: BuildContext) -> None: target = ctx.substitute(self.path) if posixpath.isabs(target): ctx.workdir = posixpath.normpath(target) else: base = ctx.workdir or "/" ctx.workdir = posixpath.normpath(posixpath.join(base, target))
[docs] async def execute_async(self, ctx: AsyncBuildContext) -> None: target = ctx.substitute(self.path) if posixpath.isabs(target): ctx.workdir = posixpath.normpath(target) else: base = ctx.workdir or "/" ctx.workdir = posixpath.normpath(posixpath.join(base, target))