Merge pull request 'Init 'clan_lib' namespace and migrate clan_cli.api' (#3414) from hsjobeki/clan-core:clan-lib into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/3414
This commit is contained in:
@@ -29,8 +29,8 @@ from dataclasses import dataclass, field
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from clan_cli.api.modules import Frontmatter, extract_frontmatter, get_roles
|
|
||||||
from clan_cli.errors import ClanError
|
from clan_cli.errors import ClanError
|
||||||
|
from clan_lib.api.modules import Frontmatter, extract_frontmatter, get_roles
|
||||||
|
|
||||||
# Get environment variables
|
# Get environment variables
|
||||||
CLAN_CORE_PATH = Path(os.environ["CLAN_CORE_PATH"])
|
CLAN_CORE_PATH = Path(os.environ["CLAN_CORE_PATH"])
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import time
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from clan_cli.api import ApiError, ErrorDataClass, SuccessDataClass
|
from clan_lib.api import ApiError, ErrorDataClass, SuccessDataClass
|
||||||
from clan_cli.api.directory import FileRequest
|
from clan_lib.api.directory import FileRequest
|
||||||
from gi.repository import Gio, GLib, Gtk
|
from gi.repository import Gio, GLib, Gtk
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import os
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from clan_cli.api import API
|
|
||||||
from clan_cli.custom_logger import setup_logging
|
from clan_cli.custom_logger import setup_logging
|
||||||
|
from clan_lib.api import API
|
||||||
|
|
||||||
from clan_app.api.file_gtk import open_file
|
from clan_app.api.file_gtk import open_file
|
||||||
from clan_app.deps.webview.webview import Size, SizeHint, Webview
|
from clan_app.deps.webview.webview import Size, SizeHint, Webview
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from collections.abc import Callable
|
|||||||
from enum import IntEnum
|
from enum import IntEnum
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from clan_cli.api import (
|
from clan_lib.api import (
|
||||||
ApiError,
|
ApiError,
|
||||||
ErrorDataClass,
|
ErrorDataClass,
|
||||||
MethodRegistry,
|
MethodRegistry,
|
||||||
|
|||||||
@@ -1,9 +1,35 @@
|
|||||||
|
import importlib
|
||||||
import json
|
import json
|
||||||
|
import pkgutil
|
||||||
|
from types import ModuleType
|
||||||
|
|
||||||
from clan_cli.api import API
|
|
||||||
|
def import_all_modules_from_package(pkg: ModuleType) -> None:
|
||||||
|
for _loader, module_name, _is_pkg in pkgutil.walk_packages(
|
||||||
|
pkg.__path__, prefix=f"{pkg.__name__}."
|
||||||
|
):
|
||||||
|
base_name = module_name.split(".")[-1]
|
||||||
|
|
||||||
|
# Skip test modules
|
||||||
|
if (
|
||||||
|
base_name.startswith("test_")
|
||||||
|
or base_name.endswith("_test")
|
||||||
|
or base_name == "conftest"
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
|
||||||
|
importlib.import_module(module_name)
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
|
import clan_cli
|
||||||
|
import clan_lib
|
||||||
|
|
||||||
|
import_all_modules_from_package(clan_cli)
|
||||||
|
import_all_modules_from_package(clan_lib)
|
||||||
|
|
||||||
|
from clan_lib.api import API
|
||||||
|
|
||||||
schema = API.to_json_schema()
|
schema = API.to_json_schema()
|
||||||
print(f"""{json.dumps(schema, indent=2)}""")
|
print(f"""{json.dumps(schema, indent=2)}""")
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ from pathlib import Path
|
|||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
|
|
||||||
# These imports are unused, but necessary for @API.register to run once.
|
# These imports are unused, but necessary for @API.register to run once.
|
||||||
from .api import admin, directory, disk, iwd, mdns_discovery, modules
|
from clan_lib.api import admin, directory, disk, iwd, mdns_discovery, modules
|
||||||
|
|
||||||
from .arg_actions import AppendOptionAction
|
from .arg_actions import AppendOptionAction
|
||||||
from .clan import show, update
|
from .clan import show, update
|
||||||
|
|
||||||
@@ -65,7 +66,10 @@ def add_common_flags(parser: argparse.ArgumentParser) -> None:
|
|||||||
The error that would be thrown by argparse:
|
The error that would be thrown by argparse:
|
||||||
- argparse.ArgumentError
|
- argparse.ArgumentError
|
||||||
"""
|
"""
|
||||||
return any(arg in action.option_strings for action in parser._actions) # noqa: SLF001 -> private_member accessed
|
return any(
|
||||||
|
arg in action.option_strings
|
||||||
|
for action in parser._actions # noqa: SLF001
|
||||||
|
)
|
||||||
|
|
||||||
if not argument_exists(parser, "--debug"):
|
if not argument_exists(parser, "--debug"):
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ import logging
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from clan_cli.api import API
|
from clan_lib.api import API
|
||||||
|
|
||||||
from clan_cli.cmd import CmdOut, RunOpts, run
|
from clan_cli.cmd import CmdOut, RunOpts, run
|
||||||
from clan_cli.errors import ClanError
|
from clan_cli.errors import ClanError
|
||||||
from clan_cli.flake import Flake
|
from clan_cli.flake import Flake
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ import logging
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
from clan_cli.api import API
|
from clan_lib.api import API
|
||||||
|
|
||||||
from clan_cli.cmd import run_no_stdout
|
from clan_cli.cmd import run_no_stdout
|
||||||
from clan_cli.errors import ClanCmdError, ClanError
|
from clan_cli.errors import ClanCmdError, ClanError
|
||||||
from clan_cli.inventory import Meta
|
from clan_cli.inventory import Meta
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
from clan_cli.api import API
|
from clan_lib.api import API
|
||||||
|
|
||||||
from clan_cli.inventory import Inventory, Meta, load_inventory_json, set_inventory
|
from clan_cli.inventory import Inventory, Meta, load_inventory_json, set_inventory
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ from pathlib import Path
|
|||||||
from tempfile import TemporaryDirectory
|
from tempfile import TemporaryDirectory
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from clan_cli.api import API
|
from clan_lib.api import API
|
||||||
|
|
||||||
from clan_cli.cmd import Log, RunOpts, cmd_with_root, run
|
from clan_cli.cmd import Log, RunOpts, cmd_with_root, run
|
||||||
from clan_cli.errors import ClanError
|
from clan_cli.errors import ClanError
|
||||||
from clan_cli.facts.generate import generate_facts
|
from clan_cli.facts.generate import generate_facts
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ import logging
|
|||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from clan_cli.api import API
|
from clan_lib.api import API
|
||||||
|
|
||||||
from clan_cli.cmd import Log, RunOpts, run
|
from clan_cli.cmd import Log, RunOpts, run
|
||||||
from clan_cli.errors import ClanError
|
from clan_cli.errors import ClanError
|
||||||
from clan_cli.nix import nix_build
|
from clan_cli.nix import nix_build
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ from dataclasses import dataclass
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from clan_cli.api import API, dataclass_to_dict, from_dict
|
from clan_lib.api import API, dataclass_to_dict, from_dict
|
||||||
|
|
||||||
from clan_cli.cmd import run_no_stdout
|
from clan_cli.cmd import run_no_stdout
|
||||||
from clan_cli.errors import ClanCmdError, ClanError
|
from clan_cli.errors import ClanCmdError, ClanError
|
||||||
from clan_cli.git import commit_file
|
from clan_cli.git import commit_file
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ import re
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from clan_cli.api import API
|
from clan_lib.api import API
|
||||||
|
|
||||||
from clan_cli.completions import add_dynamic_completer, complete_tags
|
from clan_cli.completions import add_dynamic_completer, complete_tags
|
||||||
from clan_cli.dirs import get_clan_flake_toplevel_or_env
|
from clan_cli.dirs import get_clan_flake_toplevel_or_env
|
||||||
from clan_cli.errors import ClanError
|
from clan_cli.errors import ClanError
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ import logging
|
|||||||
import shutil
|
import shutil
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
from clan_lib.api import API
|
||||||
|
|
||||||
from clan_cli import Flake, inventory
|
from clan_cli import Flake, inventory
|
||||||
from clan_cli.api import API
|
|
||||||
from clan_cli.completions import add_dynamic_completer, complete_machines
|
from clan_cli.completions import add_dynamic_completer, complete_machines
|
||||||
from clan_cli.dirs import specific_machine_dir
|
from clan_cli.dirs import specific_machine_dir
|
||||||
from clan_cli.secrets.folders import sops_secrets_folder
|
from clan_cli.secrets.folders import sops_secrets_folder
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ from dataclasses import dataclass
|
|||||||
from enum import Enum
|
from enum import Enum
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from clan_cli.api import API
|
from clan_lib.api import API
|
||||||
|
|
||||||
from clan_cli.cmd import RunOpts, run, run_no_stdout
|
from clan_cli.cmd import RunOpts, run, run_no_stdout
|
||||||
from clan_cli.completions import add_dynamic_completer, complete_machines
|
from clan_cli.completions import add_dynamic_completer, complete_machines
|
||||||
from clan_cli.dirs import specific_machine_dir
|
from clan_cli.dirs import specific_machine_dir
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ from enum import Enum
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from tempfile import TemporaryDirectory
|
from tempfile import TemporaryDirectory
|
||||||
|
|
||||||
from clan_cli.api import API
|
from clan_lib.api import API
|
||||||
|
|
||||||
from clan_cli.cmd import Log, RunOpts, run
|
from clan_cli.cmd import Log, RunOpts, run
|
||||||
from clan_cli.completions import (
|
from clan_cli.completions import (
|
||||||
add_dynamic_completer,
|
add_dynamic_completer,
|
||||||
|
|||||||
@@ -6,10 +6,11 @@ from dataclasses import dataclass
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Literal
|
from typing import Literal
|
||||||
|
|
||||||
from clan_cli.api import API
|
from clan_lib.api import API
|
||||||
from clan_cli.api.disk import MachineDiskMatter
|
from clan_lib.api.disk import MachineDiskMatter
|
||||||
from clan_cli.api.modules import parse_frontmatter
|
from clan_lib.api.modules import parse_frontmatter
|
||||||
from clan_cli.api.serde import dataclass_to_dict
|
from clan_lib.api.serde import dataclass_to_dict
|
||||||
|
|
||||||
from clan_cli.cmd import RunOpts, run_no_stdout
|
from clan_cli.cmd import RunOpts, run_no_stdout
|
||||||
from clan_cli.completions import add_dynamic_completer, complete_tags
|
from clan_cli.completions import add_dynamic_completer, complete_tags
|
||||||
from clan_cli.dirs import specific_machine_dir
|
from clan_cli.dirs import specific_machine_dir
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ import re
|
|||||||
import shlex
|
import shlex
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from clan_cli.api import API
|
from clan_lib.api import API
|
||||||
|
|
||||||
from clan_cli.async_run import AsyncContext, AsyncOpts, AsyncRuntime, is_async_cancelled
|
from clan_cli.async_run import AsyncContext, AsyncOpts, AsyncRuntime, is_async_cancelled
|
||||||
from clan_cli.cmd import MsgColor, RunOpts, run
|
from clan_cli.cmd import MsgColor, RunOpts, run
|
||||||
from clan_cli.colors import AnsiColor
|
from clan_cli.colors import AnsiColor
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ from pathlib import Path
|
|||||||
from tempfile import NamedTemporaryFile
|
from tempfile import NamedTemporaryFile
|
||||||
from typing import IO, Any
|
from typing import IO, Any
|
||||||
|
|
||||||
from clan_cli.api import API
|
from clan_lib.api import API
|
||||||
|
|
||||||
from clan_cli.cmd import Log, RunOpts, run
|
from clan_cli.cmd import Log, RunOpts, run
|
||||||
from clan_cli.dirs import user_config_dir
|
from clan_cli.dirs import user_config_dir
|
||||||
from clan_cli.errors import ClanError
|
from clan_cli.errors import ClanError
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ import sys
|
|||||||
from dataclasses import is_dataclass
|
from dataclasses import is_dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from clan_cli.api import API
|
|
||||||
from clan_cli.api.util import JSchemaTypeError, type_to_dict
|
|
||||||
from clan_cli.errors import ClanError
|
from clan_cli.errors import ClanError
|
||||||
|
from clan_lib.api import API
|
||||||
|
from clan_lib.api.util import JSchemaTypeError, type_to_dict
|
||||||
|
|
||||||
|
|
||||||
def should_skip(file_path: Path, excludes: list[Path]) -> bool:
|
def should_skip(file_path: Path, excludes: list[Path]) -> bool:
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ from pathlib import Path
|
|||||||
from typing import Any, Literal
|
from typing import Any, Literal
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
# Functions to test
|
|
||||||
from clan_cli.api import dataclass_to_dict, from_dict
|
|
||||||
from clan_cli.errors import ClanError
|
from clan_cli.errors import ClanError
|
||||||
from clan_cli.machines import machines
|
from clan_cli.machines import machines
|
||||||
|
|
||||||
|
# Functions to test
|
||||||
|
from clan_lib.api import dataclass_to_dict, from_dict
|
||||||
|
|
||||||
|
|
||||||
def test_simple() -> None:
|
def test_simple() -> None:
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import subprocess
|
|||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from clan_cli.api.modules import list_modules
|
|
||||||
from clan_cli.flake import Flake
|
from clan_cli.flake import Flake
|
||||||
from clan_cli.inventory import (
|
from clan_cli.inventory import (
|
||||||
Inventory,
|
Inventory,
|
||||||
@@ -14,6 +13,7 @@ from clan_cli.inventory import (
|
|||||||
from clan_cli.machines.create import CreateOptions, create_machine
|
from clan_cli.machines.create import CreateOptions, create_machine
|
||||||
from clan_cli.nix import nix_eval, run_no_stdout
|
from clan_cli.nix import nix_eval, run_no_stdout
|
||||||
from clan_cli.tests.fixtures_flakes import FlakeForTest
|
from clan_cli.tests.fixtures_flakes import FlakeForTest
|
||||||
|
from clan_lib.api.modules import list_modules
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .age_keys import KeyPair
|
from .age_keys import KeyPair
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
|
|
||||||
# Functions to test
|
# Functions to test
|
||||||
from clan_cli.api import (
|
from clan_lib.api import (
|
||||||
dataclass_to_dict,
|
dataclass_to_dict,
|
||||||
sanitize_string,
|
sanitize_string,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ import argparse
|
|||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from clan_cli.api import API
|
|
||||||
from clan_cli.completions import add_dynamic_completer, complete_machines
|
from clan_cli.completions import add_dynamic_completer, complete_machines
|
||||||
from clan_cli.errors import ClanError
|
from clan_cli.errors import ClanError
|
||||||
from clan_cli.flake import Flake
|
from clan_cli.flake import Flake
|
||||||
|
from clan_lib.api import API
|
||||||
|
|
||||||
from .generate import Var
|
from .generate import Var
|
||||||
from .list import get_vars
|
from .list import get_vars
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from clan_cli.api import API
|
|
||||||
from clan_cli.completions import add_dynamic_completer, complete_machines
|
from clan_cli.completions import add_dynamic_completer, complete_machines
|
||||||
from clan_cli.errors import ClanError
|
from clan_cli.errors import ClanError
|
||||||
from clan_cli.flake import Flake
|
from clan_cli.flake import Flake
|
||||||
from clan_cli.machines.machines import Machine
|
from clan_cli.machines.machines import Machine
|
||||||
|
from clan_lib.api import API
|
||||||
|
|
||||||
from ._types import GeneratorUpdate
|
from ._types import GeneratorUpdate
|
||||||
from .generate import Generator, Prompt, Var, execute_generator
|
from .generate import Generator, Prompt, Var, execute_generator
|
||||||
|
|||||||
0
pkgs/clan-cli/clan_lib/__init__.py
Normal file
0
pkgs/clan-cli/clan_lib/__init__.py
Normal file
@@ -6,13 +6,14 @@ from pathlib import Path
|
|||||||
from typing import Any, TypedDict
|
from typing import Any, TypedDict
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
from clan_cli.api import API
|
|
||||||
from clan_cli.api.modules import Frontmatter, extract_frontmatter
|
|
||||||
from clan_cli.dirs import TemplateType, clan_templates
|
from clan_cli.dirs import TemplateType, clan_templates
|
||||||
from clan_cli.errors import ClanError
|
from clan_cli.errors import ClanError
|
||||||
from clan_cli.git import commit_file
|
from clan_cli.git import commit_file
|
||||||
from clan_cli.machines.hardware import HardwareConfig, show_machine_hardware_config
|
from clan_cli.machines.hardware import HardwareConfig, show_machine_hardware_config
|
||||||
|
|
||||||
|
from clan_lib.api import API
|
||||||
|
from clan_lib.api.modules import Frontmatter, extract_frontmatter
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ from typing import (
|
|||||||
is_typeddict,
|
is_typeddict,
|
||||||
)
|
)
|
||||||
|
|
||||||
from clan_cli.api.serde import dataclass_to_dict
|
from clan_lib.api.serde import dataclass_to_dict
|
||||||
|
|
||||||
|
|
||||||
class JSchemaTypeError(Exception):
|
class JSchemaTypeError(Exception):
|
||||||
0
pkgs/clan-cli/clan_lib/py.typed
Normal file
0
pkgs/clan-cli/clan_lib/py.typed
Normal file
@@ -15,6 +15,7 @@ Documentation = "https://docs.clan.lol/"
|
|||||||
Repository = "https://git.clan.lol/clan/clan-core"
|
Repository = "https://git.clan.lol/clan/clan-core"
|
||||||
|
|
||||||
[tool.setuptools.packages.find]
|
[tool.setuptools.packages.find]
|
||||||
|
include = ["clan_lib*", "clan_cli*"]
|
||||||
exclude = ["clan_cli.nixpkgs*", "result"]
|
exclude = ["clan_cli.nixpkgs*", "result"]
|
||||||
|
|
||||||
[tool.setuptools.package-data]
|
[tool.setuptools.package-data]
|
||||||
|
|||||||
Reference in New Issue
Block a user