clan_lib: Add get_service_readmes api function
Returns the README.md for one or multiple clan services, needed for the clan ai feature
This commit is contained in:
@@ -210,6 +210,41 @@ def find_instance_refs_for_module(
|
|||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
type ServiceName = str
|
||||||
|
type Readme = str | None
|
||||||
|
type ServiceReadmes = dict[ServiceName, Readme]
|
||||||
|
type InputName = str | None
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True)
|
||||||
|
class ServiceReadmeCollection:
|
||||||
|
input_name: str | None
|
||||||
|
readmes: ServiceReadmes
|
||||||
|
|
||||||
|
|
||||||
|
@API.register
|
||||||
|
def get_service_readmes(
|
||||||
|
input_name: InputName,
|
||||||
|
service_names: list[ServiceName],
|
||||||
|
flake: Flake,
|
||||||
|
) -> ServiceReadmeCollection:
|
||||||
|
"""Get the README content for a service module"""
|
||||||
|
query_param = "modulesPerSource"
|
||||||
|
|
||||||
|
if input_name is None:
|
||||||
|
query_param = "staticModules"
|
||||||
|
|
||||||
|
service_queries = "{" + ",".join(service_names) + "}"
|
||||||
|
|
||||||
|
query = (
|
||||||
|
f"clanInternals.inventoryClass.{query_param}.{service_queries}.manifest.readme"
|
||||||
|
)
|
||||||
|
|
||||||
|
readmes = flake.select(query)
|
||||||
|
|
||||||
|
return ServiceReadmeCollection(input_name=input_name, readmes=readmes)
|
||||||
|
|
||||||
|
|
||||||
@API.register
|
@API.register
|
||||||
def list_service_modules(flake: Flake) -> ClanModules:
|
def list_service_modules(flake: Flake) -> ClanModules:
|
||||||
"""Show information about a module"""
|
"""Show information about a module"""
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from clan_cli.tests.fixtures_flakes import nested_dict
|
|||||||
from clan_lib.errors import ClanError
|
from clan_lib.errors import ClanError
|
||||||
from clan_lib.flake.flake import Flake
|
from clan_lib.flake.flake import Flake
|
||||||
from clan_lib.services.modules import (
|
from clan_lib.services.modules import (
|
||||||
|
get_service_readmes,
|
||||||
list_service_instances,
|
list_service_instances,
|
||||||
list_service_modules,
|
list_service_modules,
|
||||||
set_service_instance,
|
set_service_instance,
|
||||||
@@ -70,6 +71,27 @@ def test_list_service_instances(
|
|||||||
assert borgbackup_service.info.roles["server"].description is not None
|
assert borgbackup_service.info.roles["server"].description is not None
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.with_core
|
||||||
|
def test_get_service_readmes(
|
||||||
|
clan_flake: Callable[..., Flake],
|
||||||
|
) -> None:
|
||||||
|
clan_config: Clan = {"inventory": {}}
|
||||||
|
flake = clan_flake(clan_config)
|
||||||
|
|
||||||
|
service_modules = list_service_modules(flake)
|
||||||
|
service_names = [m.usage_ref["name"] for m in service_modules.modules]
|
||||||
|
|
||||||
|
collection = get_service_readmes(
|
||||||
|
input_name=None,
|
||||||
|
service_names=service_names,
|
||||||
|
flake=flake,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert collection.input_name is None
|
||||||
|
assert collection.readmes["borgbackup"]
|
||||||
|
assert len(collection.readmes["borgbackup"]) > 10
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.with_core
|
@pytest.mark.with_core
|
||||||
def test_list_service_modules(
|
def test_list_service_modules(
|
||||||
clan_flake: Callable[..., Flake],
|
clan_flake: Callable[..., Flake],
|
||||||
|
|||||||
Reference in New Issue
Block a user