make cli options more type safe using a dataclass

This commit is contained in:
Jörg Thalheim
2023-12-08 11:27:18 +01:00
parent e97bcbd94f
commit b9ca10c4da

View File

@@ -7,6 +7,7 @@ import shlex
import subprocess
import sys
import tempfile
from dataclasses import dataclass, field
from pathlib import Path
from typing import IO
@@ -268,13 +269,23 @@ def run_vm(
raise ClanError(f"qemu failed with {res.returncode}")
@dataclass
class RunOptions:
machine: str
flake_url: str | None
nix_options: list[str] = field(default_factory=list)
flake: Path | None = None
def run_command(args: argparse.Namespace) -> None:
flake_url = args.flake_url or args.flake
run_options = RunOptions(args.machine, args.flake_url, args.option, args.flake)
flake_url = run_options.flake_url or run_options.flake
if not flake_url:
flake_url = Path.cwd()
vm = asyncio.run(inspect_vm(flake_url=flake_url, flake_attr=args.machine))
vm = asyncio.run(inspect_vm(flake_url=flake_url, flake_attr=run_options.machine))
run_vm(vm, args.option)
run_vm(vm, run_options.nix_options)
def register_run_parser(parser: argparse.ArgumentParser) -> None: