MCPcopy Create free account
hub / github.com/dagger/dagger / Engine

Class Engine

sdk/python/src/dagger/provisioning/_engine.py:38–129  ·  view source on GitHub ↗

Start engine session, provisioning if needed.

Source from the content-addressed store, hash-verified

36
37
38class Engine:
39 """Start engine session, provisioning if needed."""
40
41 def __init__(self, cfg: Config, stack: contextlib.AsyncExitStack) -> None:
42 super().__init__()
43 self.cfg = cfg
44 self.stack = stack
45 self.progress = Progress(cfg.console)
46 self.connect_params = None
47 self.connect_config = None
48 self.has_provisioned = False
49
50 async def provision(self) -> Self:
51 connect_params = ConnectParams.from_env()
52
53 if connect_params and self.cfg.workdir:
54 msg = (
55 "Cannot configure workdir for existing session "
56 "(please use --workdir or host.directory "
57 "with absolute paths instead)."
58 )
59 raise ProvisionError(msg)
60
61 if not connect_params:
62 self.has_provisioned = True
63 # Only start progress if we are provisioning, not on active sessions
64 # like `dagger run`.
65 await self.progress.start("Provisioning engine")
66 cli_bin = await self.get_cli()
67
68 await self.progress.update("Creating new Engine session")
69 connect_params = await self.stack.enter_async_context(
70 start_cli_session(self.cfg, cli_bin)
71 )
72
73 self.connect_params = connect_params
74 self.connect_config = ConnectConfig(
75 timeout=self.cfg.timeout,
76 retry=self.cfg.retry,
77 )
78
79 return self
80
81 async def get_cli(self) -> str:
82 """Get path to CLI."""
83 if cli_bin := os.getenv("_EXPERIMENTAL_DAGGER_CLI_BIN"):
84 return cli_bin
85
86 # Get from cache or download.
87 return await Downloader(progress=self.progress)
88
89 async def setup_client(self, conn: BaseConnection) -> "Client":
90 """Setup client instance from connection."""
91 await self.progress.update("Establishing connection to the API server")
92 conn = await self.stack.enter_async_context(conn)
93
94 client = dagger.Client.from_connection(conn)
95 self.stack.push_async_callback(self.progress.stop)

Callers 2

provision_engineFunction · 0.70
__aenter__Method · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected