From e219d38c7ce4487edd5db56a81016cc3dd2b7318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Fri, 28 Jul 2023 16:12:57 +0200 Subject: [PATCH 1/2] cli/main: catch ClanError in main --- pkgs/clan-cli/clan_cli/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/clan-cli/clan_cli/__init__.py b/pkgs/clan-cli/clan_cli/__init__.py index e4ff0dfa..efa5806b 100644 --- a/pkgs/clan-cli/clan_cli/__init__.py +++ b/pkgs/clan-cli/clan_cli/__init__.py @@ -30,7 +30,11 @@ def main() -> None: args = parser.parse_args() if hasattr(args, "func"): - args.func(args) # pragma: no cover + try: + args.func(args) + except ClanError as e: + print(f"{sys.argv[0]}: {e}") + sys.exit(1) if __name__ == "__main__": # pragma: no cover -- 2.46.0 From 270c3fc2e6d9197450971a6557180062311d5b4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Fri, 28 Jul 2023 16:13:25 +0200 Subject: [PATCH 2/2] cli: drop no cover pragma We don't really enforce 100% coverage anymore --- pkgs/clan-cli/clan_cli/__init__.py | 5 +++-- pkgs/clan-cli/clan_cli/admin.py | 10 +++++----- pkgs/clan-cli/clan_cli/ssh.py | 2 +- pkgs/clan-cli/clan_cli/zerotier/__init__.py | 6 ++---- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/pkgs/clan-cli/clan_cli/__init__.py b/pkgs/clan-cli/clan_cli/__init__.py index efa5806b..ab4db80b 100644 --- a/pkgs/clan-cli/clan_cli/__init__.py +++ b/pkgs/clan-cli/clan_cli/__init__.py @@ -3,11 +3,12 @@ import argparse import sys from . import admin, ssh +from .errors import ClanError has_argcomplete = True try: import argcomplete -except ImportError: # pragma: no cover +except ImportError: has_argcomplete = False @@ -37,5 +38,5 @@ def main() -> None: sys.exit(1) -if __name__ == "__main__": # pragma: no cover +if __name__ == "__main__": main() diff --git a/pkgs/clan-cli/clan_cli/admin.py b/pkgs/clan-cli/clan_cli/admin.py index bf438f88..cf40532b 100644 --- a/pkgs/clan-cli/clan_cli/admin.py +++ b/pkgs/clan-cli/clan_cli/admin.py @@ -18,7 +18,7 @@ def create(args: argparse.Namespace) -> None: ) -def edit(args: argparse.Namespace) -> None: # pragma: no cover +def edit(args: argparse.Namespace) -> None: # TODO add some cli options to change certain options without relying on a text editor clan_flake = f"{args.folder}/flake.nix" if os.path.isfile(clan_flake): @@ -34,7 +34,7 @@ def edit(args: argparse.Namespace) -> None: # pragma: no cover ) -def rebuild(args: argparse.Namespace) -> None: # pragma: no cover +def rebuild(args: argparse.Namespace) -> None: # TODO get clients from zerotier cli? if args.host: print(f"would redeploy {args.host} from clan {args.folder}") @@ -42,7 +42,7 @@ def rebuild(args: argparse.Namespace) -> None: # pragma: no cover print(f"would redeploy all hosts from clan {args.folder}") -def destroy(args: argparse.Namespace) -> None: # pragma: no cover +def destroy(args: argparse.Namespace) -> None: # TODO get clan folder & hosts from somwhere (maybe ~/.config/clan/$name /) # send some kind of kill signal, then remove the folder if args.yes: @@ -53,14 +53,14 @@ def destroy(args: argparse.Namespace) -> None: # pragma: no cover ) -def backup(args: argparse.Namespace) -> None: # pragma: no cover +def backup(args: argparse.Namespace) -> None: if args.host: print(f"would backup {args.host} from clan {args.folder}") else: print(f"would backup all hosts from clan {args.folder}") -def git(args: argparse.Namespace) -> None: # pragma: no cover +def git(args: argparse.Namespace) -> None: subprocess.Popen( [ "git", diff --git a/pkgs/clan-cli/clan_cli/ssh.py b/pkgs/clan-cli/clan_cli/ssh.py index 0eac6810..6c8bd22e 100644 --- a/pkgs/clan-cli/clan_cli/ssh.py +++ b/pkgs/clan-cli/clan_cli/ssh.py @@ -53,7 +53,7 @@ def qrcode_scan(pictureFile: str) -> str: ) -def main(args: argparse.Namespace) -> None: # pragma: no cover +def main(args: argparse.Namespace) -> None: if args.json: with open(args.json) as file: ssh_data = json.load(file) diff --git a/pkgs/clan-cli/clan_cli/zerotier/__init__.py b/pkgs/clan-cli/clan_cli/zerotier/__init__.py index be00bc63..f52fd8e6 100644 --- a/pkgs/clan-cli/clan_cli/zerotier/__init__.py +++ b/pkgs/clan-cli/clan_cli/zerotier/__init__.py @@ -62,7 +62,7 @@ class ZerotierController: resp = urllib.request.urlopen(req) return json.load(resp) - def status(self) -> dict[str, Any]: # pragma: no cover + def status(self) -> dict[str, Any]: return self._http_request("/status") def create_network(self, data: dict[str, Any] = {}) -> dict[str, Any]: @@ -75,9 +75,7 @@ class ZerotierController: def get_network(self, id: str) -> dict[str, Any]: return self._http_request(f"/controller/network/{id}") - def update_network( - self, id: str, new_config: dict[str, Any] - ) -> dict[str, Any]: # pragma: no cover + def update_network(self, id: str, new_config: dict[str, Any]) -> dict[str, Any]: return self._http_request( f"/controller/network/{id}", method="POST", data=new_config ) -- 2.46.0