From c77a3b11a8616d876faf4df8a5b9950014219149 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Tue, 13 May 2025 17:35:54 +0200 Subject: [PATCH] Refactor(clan_lib): move nix bound classes out of the cli folder --- pkgs/clan-cli/clan_cli/clan/create.py | 3 ++- pkgs/clan-cli/clan_cli/clan/show.py | 2 +- pkgs/clan-cli/clan_cli/clan/update.py | 3 ++- pkgs/clan-cli/clan_cli/inventory/__init__.py | 25 ++----------------- pkgs/clan-cli/clan_cli/machines/create.py | 12 +++++---- pkgs/clan-cli/clan_cli/machines/list.py | 2 +- pkgs/clan-cli/clan_cli/machines/morph.py | 3 ++- .../clan-cli/clan_cli/tests/test_inventory.py | 2 +- pkgs/clan-cli/clan_cli/tests/test_modules.py | 8 +++--- .../nix_models/inventory.py} | 0 .../nix_models}/update.sh | 2 +- pkgs/clan-cli/clan_lib/tests/test_create.py | 4 +-- pkgs/clan-cli/flake-module.nix | 4 +-- pkgs/clan-cli/shell.nix | 2 +- 14 files changed, 29 insertions(+), 43 deletions(-) rename pkgs/clan-cli/{clan_cli/inventory/classes.py => clan_lib/nix_models/inventory.py} (100%) rename pkgs/clan-cli/{clan_cli/inventory => clan_lib/nix_models}/update.sh (66%) diff --git a/pkgs/clan-cli/clan_cli/clan/create.py b/pkgs/clan-cli/clan_cli/clan/create.py index fc63a6574..4513e3ab1 100644 --- a/pkgs/clan-cli/clan_cli/clan/create.py +++ b/pkgs/clan-cli/clan_cli/clan/create.py @@ -5,11 +5,12 @@ from dataclasses import dataclass from pathlib import Path from clan_lib.api import API +from clan_lib.nix_models.inventory import Inventory from clan_cli.cmd import CmdOut, RunOpts, run from clan_cli.errors import ClanError from clan_cli.flake import Flake -from clan_cli.inventory import Inventory, init_inventory +from clan_cli.inventory import init_inventory from clan_cli.nix import nix_command, nix_metadata, nix_shell from clan_cli.templates import ( InputPrio, diff --git a/pkgs/clan-cli/clan_cli/clan/show.py b/pkgs/clan-cli/clan_cli/clan/show.py index 4e6ba997b..653789f24 100644 --- a/pkgs/clan-cli/clan_cli/clan/show.py +++ b/pkgs/clan-cli/clan_cli/clan/show.py @@ -5,11 +5,11 @@ from pathlib import Path from urllib.parse import urlparse from clan_lib.api import API +from clan_lib.nix_models.inventory import Meta from clan_cli.cmd import run from clan_cli.errors import ClanCmdError, ClanError from clan_cli.flake import Flake -from clan_cli.inventory import Meta from clan_cli.nix import nix_eval log = logging.getLogger(__name__) diff --git a/pkgs/clan-cli/clan_cli/clan/update.py b/pkgs/clan-cli/clan_cli/clan/update.py index b1d87cf01..d4af58fd2 100644 --- a/pkgs/clan-cli/clan_cli/clan/update.py +++ b/pkgs/clan-cli/clan_cli/clan/update.py @@ -1,9 +1,10 @@ from dataclasses import dataclass from clan_lib.api import API +from clan_lib.nix_models.inventory import Inventory, Meta from clan_cli.flake import Flake -from clan_cli.inventory import Inventory, Meta, load_inventory_json, set_inventory +from clan_cli.inventory import load_inventory_json, set_inventory @dataclass diff --git a/pkgs/clan-cli/clan_cli/inventory/__init__.py b/pkgs/clan-cli/clan_cli/inventory/__init__.py index 5389f28f0..1a70a542e 100644 --- a/pkgs/clan-cli/clan_cli/inventory/__init__.py +++ b/pkgs/clan-cli/clan_cli/inventory/__init__.py @@ -19,7 +19,8 @@ from dataclasses import dataclass from pathlib import Path from typing import Any -from clan_lib.api import API, dataclass_to_dict, from_dict +from clan_lib.api import API +from clan_lib.nix_models.inventory import Inventory from clan_cli.cmd import run from clan_cli.errors import ClanCmdError, ClanError @@ -27,28 +28,6 @@ from clan_cli.flake import Flake from clan_cli.git import commit_file from clan_cli.nix import nix_eval -from .classes import ( - Inventory, - # Machine classes - Machine, - MachineDeploy, - # General classes - Meta, - Service, -) - -# Re export classes here -# This allows to renaming of classes in the generated code -__all__ = [ - "Inventory", - "Machine", - "MachineDeploy", - "Meta", - "Service", - "dataclass_to_dict", - "from_dict", -] - def get_inventory_path(flake: Flake) -> Path: """ diff --git a/pkgs/clan-cli/clan_cli/machines/create.py b/pkgs/clan-cli/clan_cli/machines/create.py index 1be52545a..ab133cf14 100644 --- a/pkgs/clan-cli/clan_cli/machines/create.py +++ b/pkgs/clan-cli/clan_cli/machines/create.py @@ -5,6 +5,13 @@ from dataclasses import dataclass from pathlib import Path from clan_lib.api import API +from clan_lib.api.serde import dataclass_to_dict +from clan_lib.nix_models.inventory import ( + Machine as InventoryMachine, +) +from clan_lib.nix_models.inventory import ( + MachineDeploy, +) from clan_cli.completions import add_dynamic_completer, complete_tags from clan_cli.dirs import get_clan_flake_toplevel_or_env @@ -12,11 +19,6 @@ from clan_cli.errors import ClanError from clan_cli.flake import Flake from clan_cli.git import commit_file from clan_cli.inventory import ( - Machine as InventoryMachine, -) -from clan_cli.inventory import ( - MachineDeploy, - dataclass_to_dict, patch_inventory_with, ) from clan_cli.machines.list import list_nixos_machines diff --git a/pkgs/clan-cli/clan_cli/machines/list.py b/pkgs/clan-cli/clan_cli/machines/list.py index 2ad964196..fc66d77dd 100644 --- a/pkgs/clan-cli/clan_cli/machines/list.py +++ b/pkgs/clan-cli/clan_cli/machines/list.py @@ -11,6 +11,7 @@ from clan_lib.api import API from clan_lib.api.disk import MachineDiskMatter from clan_lib.api.modules import parse_frontmatter from clan_lib.api.serde import dataclass_to_dict +from clan_lib.nix_models.inventory import Machine as InventoryMachine from clan_cli.cmd import RunOpts, run from clan_cli.completions import add_dynamic_completer, complete_tags @@ -21,7 +22,6 @@ from clan_cli.inventory import ( load_inventory_eval, patch_inventory_with, ) -from clan_cli.inventory.classes import Machine as InventoryMachine from clan_cli.machines.hardware import HardwareConfig from clan_cli.machines.machines import Machine from clan_cli.nix import nix_eval diff --git a/pkgs/clan-cli/clan_cli/machines/morph.py b/pkgs/clan-cli/clan_cli/machines/morph.py index b438516ae..386844e5c 100644 --- a/pkgs/clan-cli/clan_cli/machines/morph.py +++ b/pkgs/clan-cli/clan_cli/machines/morph.py @@ -7,11 +7,12 @@ import re from pathlib import Path from tempfile import TemporaryDirectory +from clan_lib.nix_models.inventory import Machine as InventoryMachine + from clan_cli.cmd import Log, RunOpts, run from clan_cli.dirs import get_clan_flake_toplevel_or_env from clan_cli.errors import ClanError from clan_cli.flake import Flake -from clan_cli.inventory import Machine as InventoryMachine from clan_cli.machines.create import CreateOptions, create_machine from clan_cli.machines.machines import Machine from clan_cli.nix import nix_build, nix_command diff --git a/pkgs/clan-cli/clan_cli/tests/test_inventory.py b/pkgs/clan-cli/clan_cli/tests/test_inventory.py index 7d43e03a8..773fd284f 100644 --- a/pkgs/clan-cli/clan_cli/tests/test_inventory.py +++ b/pkgs/clan-cli/clan_cli/tests/test_inventory.py @@ -1,4 +1,4 @@ -from clan_cli.inventory.classes import Inventory, Machine, Meta, Service +from clan_lib.nix_models.inventory import Inventory, Machine, Meta, Service def test_make_meta_minimal() -> None: diff --git a/pkgs/clan-cli/clan_cli/tests/test_modules.py b/pkgs/clan-cli/clan_cli/tests/test_modules.py index 9b8418124..14e6b1d81 100644 --- a/pkgs/clan-cli/clan_cli/tests/test_modules.py +++ b/pkgs/clan-cli/clan_cli/tests/test_modules.py @@ -5,15 +5,17 @@ from typing import TYPE_CHECKING import pytest from clan_cli.flake import Flake from clan_cli.inventory import ( - Inventory, - Machine, - MachineDeploy, set_inventory, ) from clan_cli.machines.create import CreateOptions, create_machine from clan_cli.nix import nix_eval, run from clan_cli.tests.fixtures_flakes import FlakeForTest from clan_lib.api.modules import list_modules +from clan_lib.nix_models.inventory import ( + Inventory, + Machine, + MachineDeploy, +) if TYPE_CHECKING: from .age_keys import KeyPair diff --git a/pkgs/clan-cli/clan_cli/inventory/classes.py b/pkgs/clan-cli/clan_lib/nix_models/inventory.py similarity index 100% rename from pkgs/clan-cli/clan_cli/inventory/classes.py rename to pkgs/clan-cli/clan_lib/nix_models/inventory.py diff --git a/pkgs/clan-cli/clan_cli/inventory/update.sh b/pkgs/clan-cli/clan_lib/nix_models/update.sh similarity index 66% rename from pkgs/clan-cli/clan_cli/inventory/update.sh rename to pkgs/clan-cli/clan_lib/nix_models/update.sh index 2b0dbe50f..10c44d2cf 100755 --- a/pkgs/clan-cli/clan_cli/inventory/update.sh +++ b/pkgs/clan-cli/clan_lib/nix_models/update.sh @@ -5,4 +5,4 @@ set -euo pipefail jsonSchema=$(nix build .#schemas.inventory-schema-abstract --print-out-paths)/schema.json SCRIPT_DIR=$(dirname "$0") cd "$SCRIPT_DIR" -nix run .#classgen -- "$jsonSchema" "../../../clan-cli/clan_cli/inventory/classes.py" +nix run .#classgen -- "$jsonSchema" "./inventory.py" diff --git a/pkgs/clan-cli/clan_lib/tests/test_create.py b/pkgs/clan-cli/clan_lib/tests/test_create.py index 78213f05a..8b9eda21a 100644 --- a/pkgs/clan-cli/clan_lib/tests/test_create.py +++ b/pkgs/clan-cli/clan_lib/tests/test_create.py @@ -13,8 +13,6 @@ from clan_cli.dirs import specific_machine_dir from clan_cli.errors import ClanError from clan_cli.flake import Flake from clan_cli.inventory import patch_inventory_with -from clan_cli.inventory.classes import Machine as InventoryMachine -from clan_cli.inventory.classes import MachineDeploy from clan_cli.machines.create import CreateOptions as ClanCreateOptions from clan_cli.machines.create import create_machine from clan_cli.machines.list import check_machine_online @@ -28,6 +26,8 @@ from clan_cli.ssh.host_key import HostKeyCheck from clan_cli.vars.generate import generate_vars_for_machine, get_generators_closure from clan_lib.api.disk import hw_main_disk_options, set_machine_disk_schema +from clan_lib.nix_models.inventory import Machine as InventoryMachine +from clan_lib.nix_models.inventory import MachineDeploy log = logging.getLogger(__name__) diff --git a/pkgs/clan-cli/flake-module.nix b/pkgs/clan-cli/flake-module.nix index e2aecaa94..dd77bf5d6 100644 --- a/pkgs/clan-cli/flake-module.nix +++ b/pkgs/clan-cli/flake-module.nix @@ -104,10 +104,10 @@ checks = self'.packages.clan-cli.tests // { inventory-classes-up-to-date = pkgs.stdenv.mkDerivation { name = "inventory-classes-up-to-date"; - src = ./clan_cli/inventory; + src = ./clan_lib/nix_models; env = { - classFile = "classes.py"; + classFile = "inventory.py"; }; installPhase = '' ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.inventory-schema-abstract}/schema.json b_classes.py diff --git a/pkgs/clan-cli/shell.nix b/pkgs/clan-cli/shell.nix index 69aec4625..1f75d9804 100644 --- a/pkgs/clan-cli/shell.nix +++ b/pkgs/clan-cli/shell.nix @@ -48,6 +48,6 @@ mkShell { # Generate classes.py from inventory schema # This file is in .gitignore - ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.inventory-schema-abstract}/schema.json $PKG_ROOT/clan_cli/inventory/classes.py + ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.inventory-schema-abstract}/schema.json $PKG_ROOT/clan_lib/nix_models/inventory.py ''; }