diff --git a/pkgs/clan-app/ui/src/hooks/queries.ts b/pkgs/clan-app/ui/src/hooks/queries.ts index c6eb86f29..93eeab34f 100644 --- a/pkgs/clan-app/ui/src/hooks/queries.ts +++ b/pkgs/clan-app/ui/src/hooks/queries.ts @@ -318,8 +318,13 @@ export const useMachineGenerators = ( ], queryFn: async () => { const call = client.fetch("get_generators", { - base_dir: clanUri, - machine_name: machineName, + machine: { + name: machineName, + flake: { + identifier: clanUri, + }, + full_closure: true, // TODO: Make this configurable + }, // TODO: Make this configurable include_previous_values: true, }); diff --git a/pkgs/clan-cli/clan_cli/tests/test_vars.py b/pkgs/clan-cli/clan_cli/tests/test_vars.py index 98482e17e..372234f93 100644 --- a/pkgs/clan-cli/clan_cli/tests/test_vars.py +++ b/pkgs/clan-cli/clan_cli/tests/test_vars.py @@ -725,8 +725,9 @@ def test_api_set_prompts( ) assert store.get(my_generator, "prompt1").decode() == "input2" + machine = Machine(name="my_machine", flake=Flake(str(flake.path))) generators = get_generators( - machine_name="my_machine", base_dir=flake.path, include_previous_values=True + machine=machine, full_closure=True, include_previous_values=True ) # get_generators should bind the store assert generators[0].files[0]._store is not None diff --git a/pkgs/clan-cli/clan_cli/vars/generate.py b/pkgs/clan-cli/clan_cli/vars/generate.py index 1ab22fa8a..0f4277364 100644 --- a/pkgs/clan-cli/clan_cli/vars/generate.py +++ b/pkgs/clan-cli/clan_cli/vars/generate.py @@ -427,12 +427,25 @@ def _get_previous_value( return None -def _get_closure( +@API.register +def get_generators( machine: "Machine", - generator_name: str | None, full_closure: bool, + generator_name: str | None = None, include_previous_values: bool = False, ) -> list[Generator]: + """ + Get generators for a machine, with optional closure computation. + + Args: + machine: The machine to get generators for. + full_closure: If True, include all dependency generators. If False, only include missing ones. + generator_name: Name of a specific generator to get, or None for all generators. + include_previous_values: If True, populate prompts with their previous values. + + Returns: + List of generators based on the specified selection and closure mode. + """ from . import graph vars_generators = Generator.get_machine_generators(machine.name, machine.flake) @@ -510,31 +523,6 @@ def _generate_vars_for_machine( ) -@API.register -def get_generators( - machine_name: str, - base_dir: Path, - include_previous_values: bool = False, -) -> list[Generator]: - """ - Get the list of generators for a machine, optionally with previous values. - If `full_closure` is True, it returns the full closure of generators. - If `include_previous_values` is True, it includes the previous values for prompts. - - Args: - machine_name (str): The name of the machine. - base_dir (Path): The base directory of the flake. - Returns: - list[Generator]: A list of generators for the machine. - """ - - return Generator.get_machine_generators( - machine_name, - Flake(str(base_dir)), - include_previous_values, - ) - - @API.register def run_generators( machine_name: str, @@ -585,7 +573,7 @@ def create_machine_vars_interactive( regenerate: bool, no_sandbox: bool = False, ) -> None: - generators = _get_closure(machine, generator_name, regenerate) + generators = get_generators(machine, regenerate, generator_name) if len(generators) == 0: return all_prompt_values = {} diff --git a/pkgs/clan-cli/clan_cli/vars/list.py b/pkgs/clan-cli/clan_cli/vars/list.py index 42b387436..4f3d4e1bc 100644 --- a/pkgs/clan-cli/clan_cli/vars/list.py +++ b/pkgs/clan-cli/clan_cli/vars/list.py @@ -1,6 +1,5 @@ import argparse import logging -from pathlib import Path from clan_cli.completions import add_dynamic_completer, complete_machines from clan_lib.flake import Flake, require_flake @@ -20,7 +19,7 @@ def get_machine_vars(base_dir: str, machine_name: str) -> list[Var]: all_vars = [] - generators = get_generators(base_dir=Path(base_dir), machine_name=machine_name) + generators = get_generators(machine=machine, full_closure=True) for generator in generators: for var in generator.files: if var.secret: diff --git a/pkgs/clan-cli/clan_lib/tests/test_create.py b/pkgs/clan-cli/clan_lib/tests/test_create.py index ae8b67354..53c9951e1 100644 --- a/pkgs/clan-cli/clan_lib/tests/test_create.py +++ b/pkgs/clan-cli/clan_lib/tests/test_create.py @@ -222,7 +222,7 @@ def test_clan_create_api( # Invalidate cache because of new inventory clan_dir_flake.invalidate_cache() - generators = get_generators(machine.name, machine.flake.path) + generators = get_generators(machine=machine, full_closure=True) all_prompt_values = {} for generator in generators: prompt_values = {}