From 16c9aa99a95ba4f7602100990d7126a593e2aec9 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Tue, 2 Jul 2024 12:07:33 +0200 Subject: [PATCH 1/2] API: add performance constraints --- pkgs/clan-cli/clan_cli/api/modules.py | 17 ++++++----- pkgs/clan-cli/tests/test_machines_config.py | 13 ++++++++- pkgs/clan-cli/tests/test_modules.py | 32 +++++++++------------ 3 files changed, 36 insertions(+), 26 deletions(-) diff --git a/pkgs/clan-cli/clan_cli/api/modules.py b/pkgs/clan-cli/clan_cli/api/modules.py index 3020b8c0..47938934 100644 --- a/pkgs/clan-cli/clan_cli/api/modules.py +++ b/pkgs/clan-cli/clan_cli/api/modules.py @@ -104,21 +104,24 @@ def get_modules(base_path: str) -> dict[str, str]: @API.register -def list_modules(base_path: str) -> list[str]: +def list_modules(base_path: str) -> dict[str, ModuleInfo]: """ Show information about a module """ modules = get_modules(base_path) - return [m for m in modules.keys()] + return { + module_name: get_module_info(module_name, module_path) + for module_name, module_path in modules.items() + } -@API.register -def show_module_info(base_path: str, module_name: str) -> ModuleInfo: +def get_module_info( + module_name: str, + module_path: str, +) -> ModuleInfo: """ - Show information about a module + Retrieves information about a module """ - modules = get_modules(base_path) - module_path = modules.get(module_name, None) if not module_path: raise ClanError( "Module not found", diff --git a/pkgs/clan-cli/tests/test_machines_config.py b/pkgs/clan-cli/tests/test_machines_config.py index 3548a65a..66d276f9 100644 --- a/pkgs/clan-cli/tests/test_machines_config.py +++ b/pkgs/clan-cli/tests/test_machines_config.py @@ -1,3 +1,5 @@ +import time + import pytest from fixtures_flakes import FlakeForTest @@ -21,6 +23,7 @@ def test_schema_for_machine(test_flake_with_core: FlakeForTest) -> None: @pytest.mark.with_core def test_create_machine_on_minimal_clan(test_flake_minimal: FlakeForTest) -> None: assert list_machines(test_flake_minimal.path) == {} + create_machine( test_flake_minimal.path, Machine( @@ -31,7 +34,15 @@ def test_create_machine_on_minimal_clan(test_flake_minimal: FlakeForTest) -> Non icon=None, ), ) - assert list(list_machines(test_flake_minimal.path).keys()) == ["foo"] + + st = time.time() + result = list_machines(test_flake_minimal.path) + et = time.time() + elapsed = et - st + # Listing should always take less than a second + assert elapsed < 1 + + assert list(result.keys()) == ["foo"] # Writes into settings.json set_config_for_machine( diff --git a/pkgs/clan-cli/tests/test_modules.py b/pkgs/clan-cli/tests/test_modules.py index eb92de47..44e10579 100644 --- a/pkgs/clan-cli/tests/test_modules.py +++ b/pkgs/clan-cli/tests/test_modules.py @@ -1,27 +1,23 @@ +import time + import pytest from fixtures_flakes import FlakeForTest -from clan_cli.api.modules import list_modules, show_module_info +from clan_cli.api.modules import list_modules @pytest.mark.with_core def test_list_modules(test_flake_with_core: FlakeForTest) -> None: base_path = test_flake_with_core.path - module_list = list_modules(base_path) - assert isinstance(module_list, list) - assert len(module_list) > 1 + st = time.time() + modules_info = list_modules(base_path) + et = time.time() + elapsed = et - st + + # Listing should take less than a second + assert elapsed < 1 + + assert len(modules_info.items()) > 1 # Random test for those two modules - assert "borgbackup" in module_list - assert "syncthing" in module_list - - -@pytest.mark.with_core -def test_modules_details(test_flake_with_core: FlakeForTest) -> None: - base_path = test_flake_with_core.path - test_module = "borgbackup" - module_info = show_module_info(base_path, test_module) - assert module_info.description is not None and module_info.description != "" - assert module_info.categories and "backup" in module_info.categories - assert module_info.roles - assert set(module_info.roles) == {"server", "client"} - assert module_info.readme is not None and module_info.readme != "" + assert "borgbackup" in modules_info.keys() + assert "syncthing" in modules_info.keys() From d93deacb4b41f8a1a957c7bd7f7c23328cea68d5 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Tue, 2 Jul 2024 12:15:37 +0200 Subject: [PATCH 2/2] API: remove performance constraints --- pkgs/clan-cli/tests/test_machines_config.py | 8 -------- pkgs/clan-cli/tests/test_modules.py | 8 -------- 2 files changed, 16 deletions(-) diff --git a/pkgs/clan-cli/tests/test_machines_config.py b/pkgs/clan-cli/tests/test_machines_config.py index 66d276f9..3d362eb4 100644 --- a/pkgs/clan-cli/tests/test_machines_config.py +++ b/pkgs/clan-cli/tests/test_machines_config.py @@ -1,5 +1,3 @@ -import time - import pytest from fixtures_flakes import FlakeForTest @@ -35,13 +33,7 @@ def test_create_machine_on_minimal_clan(test_flake_minimal: FlakeForTest) -> Non ), ) - st = time.time() result = list_machines(test_flake_minimal.path) - et = time.time() - elapsed = et - st - # Listing should always take less than a second - assert elapsed < 1 - assert list(result.keys()) == ["foo"] # Writes into settings.json diff --git a/pkgs/clan-cli/tests/test_modules.py b/pkgs/clan-cli/tests/test_modules.py index 44e10579..f78af152 100644 --- a/pkgs/clan-cli/tests/test_modules.py +++ b/pkgs/clan-cli/tests/test_modules.py @@ -1,5 +1,3 @@ -import time - import pytest from fixtures_flakes import FlakeForTest @@ -9,13 +7,7 @@ from clan_cli.api.modules import list_modules @pytest.mark.with_core def test_list_modules(test_flake_with_core: FlakeForTest) -> None: base_path = test_flake_with_core.path - st = time.time() modules_info = list_modules(base_path) - et = time.time() - elapsed = et - st - - # Listing should take less than a second - assert elapsed < 1 assert len(modules_info.items()) > 1 # Random test for those two modules