diff --git a/pkgs/clan-cli/clan_cli/__init__.py b/pkgs/clan-cli/clan_cli/__init__.py index 9f49bb60f..45fad6760 100644 --- a/pkgs/clan-cli/clan_cli/__init__.py +++ b/pkgs/clan-cli/clan_cli/__init__.py @@ -1,11 +1,10 @@ import argparse +import os import sys from types import ModuleType from typing import Optional -from . import admin, machines, secrets, webui - -# from . import admin, config, secrets, update, webui +from . import admin, config, machines, secrets, webui from .errors import ClanError from .ssh import cli as ssh_cli @@ -24,8 +23,9 @@ def create_parser(prog: Optional[str] = None) -> argparse.ArgumentParser: admin.register_parser(parser_admin) # DISABLED: this currently crashes if a flake does not define .#clanOptions - # parser_config = subparsers.add_parser("config", help="set nixos configuration") - # config.register_parser(parser_config) + if os.environ.get("CLAN_OPTIONS_FILE") is not None: + parser_config = subparsers.add_parser("config", help="set nixos configuration") + config.register_parser(parser_config) parser_ssh = subparsers.add_parser("ssh", help="ssh to a remote machine") ssh_cli.register_parser(parser_ssh) diff --git a/pkgs/clan-cli/tests/test_config.py b/pkgs/clan-cli/tests/test_config.py index b573077b1..e0185d298 100644 --- a/pkgs/clan-cli/tests/test_config.py +++ b/pkgs/clan-cli/tests/test_config.py @@ -1,11 +1,10 @@ -import argparse import json -import sys import tempfile from pathlib import Path from typing import Any import pytest +from cli import Cli from clan_cli import config from clan_cli.config import parsing @@ -15,7 +14,7 @@ example_options = f"{Path(config.__file__).parent}/jsonschema/options.json" # use pytest.parametrize @pytest.mark.parametrize( - "argv,expected", + "args,expected", [ (["name", "DavHau"], {"name": "DavHau"}), ( @@ -27,25 +26,18 @@ example_options = f"{Path(config.__file__).parent}/jsonschema/options.json" ], ) def test_set_some_option( - argv: list[str], + args: list[str], expected: dict[str, Any], monkeypatch: pytest.MonkeyPatch, ) -> None: - # monkeypatch sys.argv + monkeypatch.setenv("CLAN_OPTIONS_FILE", example_options) + # create temporary file for out_file with tempfile.NamedTemporaryFile() as out_file: with open(out_file.name, "w") as f: json.dump({}, f) - monkeypatch.setattr( - sys, "argv", ["", "--quiet", "--settings-file", out_file.name] + argv - ) - parser = argparse.ArgumentParser() - config._register_parser( - parser=parser, - options=json.loads(Path(example_options).read_text()), - ) - args = parser.parse_args() - args.func(args) + cli = Cli() + cli.run(["config", "--quiet", "--settings-file", out_file.name] + args) json_out = json.loads(open(out_file.name).read()) assert json_out == expected