1
0
forked from clan/clan-core

API: add performance constraints

This commit is contained in:
Johannes Kirschbauer 2024-07-02 12:07:33 +02:00
parent 1448e593e9
commit 16c9aa99a9
Signed by: hsjobeki
SSH Key Fingerprint: SHA256:vX3utDqig7Ph5L0JPv87ZTPb/w7cMzREKVZzzLFg9qU
3 changed files with 36 additions and 26 deletions

View File

@ -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",

View File

@ -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(

View File

@ -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()