"""`GatewayTransport` for the Apple infra container (PRD 0070). The provisioning *logic* (per-bottle creds dirs, namespaced repo init) is backend-neutral and lives in `backend.docker.gateway_provision`; this is only the transport — how files and commands reach the running gateway. Docker uses `docker exec`/`docker cp` and Firecracker uses SSH; Apple uses the `container` CLI's equivalents against the infra container that hosts the gateway daemons. """ from __future__ import annotations from ..docker.gateway_provision import GatewayProvisionError from . import util as container_mod from .infra import INFRA_NAME class AppleGatewayTransport: """`GatewayTransport` for the gateway daemons in the Apple infra container.""" def __init__(self, gateway: str = INFRA_NAME) -> None: self.gateway = gateway def exec(self, argv: list[str]) -> None: result = container_mod.run_container_argv( ["container", "exec", self.gateway, *argv] ) if result.returncode != 0: raise GatewayProvisionError( f"gateway exec {argv!r} failed: " f"{(result.stderr or '').strip() or ''}" ) def cp_into(self, src: str, dest: str) -> None: result = container_mod.run_container_argv( ["container", "cp", src, f"{self.gateway}:{dest}"] ) if result.returncode != 0: raise GatewayProvisionError( f"gateway cp {src} -> {dest} failed: " f"{(result.stderr or '').strip() or ''}" ) __all__ = ["AppleGatewayTransport", "GatewayProvisionError"]