"""UI-agnostic installer engine.""" from __future__ import annotations from typing import Iterable from .milestone import Milestone from .runner import InstallerRunner from .state import InstallerState class InstallerCore: """Convenience wrapper around the runner and milestones.""" def __init__( self, milestones: Iterable[Milestone], state: InstallerState | None = None ): self.runner = InstallerRunner(milestones, state=state) @property def state(self) -> InstallerState: return self.runner.state def on(self, event: str, callback) -> None: self.runner.on(event, callback) def run(self, start_id: str | None = None) -> bool: return self.runner.run(start_id=start_id)