From 3db73d339622e5bcb16fa7e7a6c8c66c43c46fa1 Mon Sep 17 00:00:00 2001 From: Qubasa Date: Fri, 1 Dec 2023 15:45:05 +0100 Subject: [PATCH] Added better error handling in --flake argument --- pkgs/clan-cli/clan_cli/__init__.py | 13 ++++++++++++- pkgs/clan-cli/clan_cli/dirs.py | 3 +++ .../clan_vm_manager/clan-vm-manager.code-workspace | 11 +++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 pkgs/clan-vm-manager/clan_vm_manager/clan-vm-manager.code-workspace diff --git a/pkgs/clan-cli/clan_cli/__init__.py b/pkgs/clan-cli/clan_cli/__init__.py index 99543bddb..c3b6d02a7 100644 --- a/pkgs/clan-cli/clan_cli/__init__.py +++ b/pkgs/clan-cli/clan_cli/__init__.py @@ -10,6 +10,7 @@ from . import config, flakes, machines, secrets, vms, webui from .custom_logger import setup_logging from .dirs import get_clan_flake_toplevel from .ssh import cli as ssh_cli +from .dirs import is_clan_flake log = logging.getLogger(__name__) @@ -56,11 +57,21 @@ def create_parser(prog: str | None = None) -> argparse.ArgumentParser: default=[], ) + def flake_path(arg:str) -> Path: + flake_dir = Path(arg).resolve() + if not flake_dir.exists(): + raise argparse.ArgumentTypeError(f"flake directory {flake_dir} does not exist") + if not flake_dir.is_dir(): + raise argparse.ArgumentTypeError(f"flake directory {flake_dir} is not a directory") + if not is_clan_flake(flake_dir): + raise argparse.ArgumentTypeError(f"flake directory {flake_dir} is not a clan flake") + return flake_dir + parser.add_argument( "--flake", help="path to the flake where the clan resides in", default=get_clan_flake_toplevel(), - type=Path, + type=flake_path, ) subparsers = parser.add_subparsers() diff --git a/pkgs/clan-cli/clan_cli/dirs.py b/pkgs/clan-cli/clan_cli/dirs.py index 98076db3a..5ae376835 100644 --- a/pkgs/clan-cli/clan_cli/dirs.py +++ b/pkgs/clan-cli/clan_cli/dirs.py @@ -9,6 +9,9 @@ log = logging.getLogger(__name__) def get_clan_flake_toplevel() -> Path | None: return find_toplevel([".clan-flake", ".git", ".hg", ".svn", "flake.nix"]) +def is_clan_flake(path: Path) -> bool: + return (path / ".clan-flake").exists() + def find_git_repo_root() -> Path | None: return find_toplevel([".git"]) diff --git a/pkgs/clan-vm-manager/clan_vm_manager/clan-vm-manager.code-workspace b/pkgs/clan-vm-manager/clan_vm_manager/clan-vm-manager.code-workspace new file mode 100644 index 000000000..97a2d06b6 --- /dev/null +++ b/pkgs/clan-vm-manager/clan_vm_manager/clan-vm-manager.code-workspace @@ -0,0 +1,11 @@ +{ + "folders": [ + { + "path": ".." + }, + { + "path": "../../clan-cli" + } + ], + "settings": {} +} \ No newline at end of file