PLC0415: fix
This commit is contained in:
@@ -8,6 +8,7 @@ from clan_cli.tests import fixtures_flakes
|
||||
from clan_cli.tests.age_keys import SopsSetup, assert_secrets_file_recipients
|
||||
from clan_cli.tests.helpers import cli
|
||||
from clan_cli.tests.stdout import CaptureOutput
|
||||
from clan_lib.errors import ClanError
|
||||
from clan_lib.flake import Flake
|
||||
from clan_lib.persist.inventory_store import InventoryStore
|
||||
|
||||
@@ -93,8 +94,6 @@ def test_machines_update_nonexistent_machine(
|
||||
test_flake_with_core: fixtures_flakes.FlakeForTest,
|
||||
) -> None:
|
||||
"""Test that update command gives helpful error messages for non-existent machines."""
|
||||
from clan_lib.errors import ClanError
|
||||
|
||||
with pytest.raises(ClanError) as exc_info:
|
||||
cli.run(
|
||||
[
|
||||
@@ -118,8 +117,6 @@ def test_machines_update_typo_in_machine_name(
|
||||
test_flake_with_core: fixtures_flakes.FlakeForTest,
|
||||
) -> None:
|
||||
"""Test that update command suggests similar machine names for typos."""
|
||||
from clan_lib.errors import ClanError
|
||||
|
||||
with pytest.raises(ClanError) as exc_info:
|
||||
cli.run(
|
||||
[
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import json
|
||||
import logging
|
||||
import shutil
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
@@ -11,6 +12,7 @@ from clan_cli.vars.check import check_vars
|
||||
from clan_cli.vars.generator import (
|
||||
Generator,
|
||||
GeneratorKey,
|
||||
dependencies_as_dir,
|
||||
)
|
||||
from clan_cli.vars.get import get_machine_var
|
||||
from clan_cli.vars.graph import all_missing_closure, requested_closure
|
||||
@@ -21,7 +23,7 @@ from clan_cli.vars.set import set_var
|
||||
from clan_lib.errors import ClanError
|
||||
from clan_lib.flake import Flake
|
||||
from clan_lib.machines.machines import Machine
|
||||
from clan_lib.nix import nix_eval, run
|
||||
from clan_lib.nix import nix_config, nix_eval, run
|
||||
from clan_lib.vars.generate import (
|
||||
get_generators,
|
||||
run_generators,
|
||||
@@ -29,8 +31,6 @@ from clan_lib.vars.generate import (
|
||||
|
||||
|
||||
def test_dependencies_as_files(temp_dir: Path) -> None:
|
||||
from clan_cli.vars.generator import dependencies_as_dir
|
||||
|
||||
decrypted_dependencies = {
|
||||
"gen_1": {
|
||||
"var_1a": b"var_1a",
|
||||
@@ -506,7 +506,6 @@ def test_generate_secret_var_password_store(
|
||||
monkeypatch.setenv("PASSWORD_STORE_DIR", str(password_store_dir))
|
||||
|
||||
# Initialize password store as a git repository
|
||||
import subprocess
|
||||
|
||||
subprocess.run(["git", "init"], cwd=password_store_dir, check=True)
|
||||
subprocess.run(
|
||||
@@ -613,8 +612,6 @@ def test_generate_secret_for_multiple_machines(
|
||||
) -> None:
|
||||
flake = flake_with_sops
|
||||
|
||||
from clan_lib.nix import nix_config
|
||||
|
||||
local_system = nix_config()["system"]
|
||||
|
||||
machine1_config = flake.machines["machine1"]
|
||||
@@ -1101,8 +1098,6 @@ def test_create_sops_age_secrets(
|
||||
# check private key exists
|
||||
assert (flake.temporary_home / ".config" / "sops" / "age" / "keys.txt").is_file()
|
||||
# it should still work, even if the keys already exist
|
||||
import shutil
|
||||
|
||||
shutil.rmtree(flake.path / "sops" / "users" / "user")
|
||||
cli.run(["vars", "keygen", "--flake", str(flake.path), "--user", "user"])
|
||||
# check public key exists
|
||||
|
||||
@@ -142,8 +142,6 @@ class StoreBase(ABC):
|
||||
value: bytes,
|
||||
is_migration: bool = False,
|
||||
) -> list[Path]:
|
||||
from clan_lib.machines.machines import Machine
|
||||
|
||||
changed_files: list[Path] = []
|
||||
|
||||
# if generator was switched from shared to per-machine or vice versa,
|
||||
@@ -169,6 +167,8 @@ class StoreBase(ABC):
|
||||
if generator.machine is None:
|
||||
log_info = log.info
|
||||
else:
|
||||
from clan_lib.machines.machines import Machine # noqa: PLC0415
|
||||
|
||||
machine = Machine(name=generator.machine, flake=self.flake)
|
||||
log_info = machine.info
|
||||
if self.is_secret_store:
|
||||
|
||||
@@ -32,13 +32,14 @@ def vars_status(
|
||||
flake: Flake,
|
||||
generator_name: None | str = None,
|
||||
) -> VarStatus:
|
||||
from clan_cli.vars.generator import Generator # noqa: PLC0415
|
||||
|
||||
machine = Machine(name=machine_name, flake=flake)
|
||||
missing_secret_vars = []
|
||||
missing_public_vars = []
|
||||
# signals if a var needs to be updated (eg. needs re-encryption due to new users added)
|
||||
unfixed_secret_vars = []
|
||||
invalid_generators = []
|
||||
from clan_cli.vars.generator import Generator
|
||||
|
||||
generators = Generator.get_machine_generators([machine.name], machine.flake)
|
||||
if generator_name:
|
||||
|
||||
@@ -2,6 +2,7 @@ import argparse
|
||||
import logging
|
||||
|
||||
from clan_cli.completions import add_dynamic_completer, complete_machines
|
||||
from clan_cli.vars.generator import Generator
|
||||
from clan_lib.errors import ClanError
|
||||
from clan_lib.flake import require_flake
|
||||
from clan_lib.machines.machines import Machine
|
||||
@@ -10,8 +11,6 @@ log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def fix_vars(machine: Machine, generator_name: None | str = None) -> None:
|
||||
from clan_cli.vars.generator import Generator
|
||||
|
||||
generators = Generator.get_machine_generators([machine.name], machine.flake)
|
||||
if generator_name:
|
||||
for generator in generators:
|
||||
|
||||
@@ -1,23 +1,31 @@
|
||||
import logging
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
from contextlib import ExitStack
|
||||
from dataclasses import dataclass, field
|
||||
from functools import cached_property
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from clan_lib import bwrap
|
||||
from clan_lib.cmd import RunOpts, run
|
||||
from clan_lib.errors import ClanError
|
||||
from clan_lib.nix import nix_test_store
|
||||
from clan_lib.git import commit_files
|
||||
from clan_lib.nix import nix_config, nix_shell, nix_test_store
|
||||
|
||||
from .check import check_vars
|
||||
from .prompt import Prompt
|
||||
from .prompt import Prompt, ask
|
||||
from .var import Var
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from clan_lib.flake import Flake
|
||||
from clan_lib.machines.machines import Machine
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ._types import StoreBase
|
||||
|
||||
from clan_lib.machines.machines import Machine
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -91,8 +99,6 @@ class Generator:
|
||||
list[Generator]: A list of (unsorted) generators for the machine.
|
||||
|
||||
"""
|
||||
from clan_lib.nix import nix_config
|
||||
|
||||
config = nix_config()
|
||||
system = config["system"]
|
||||
|
||||
@@ -125,8 +131,6 @@ class Generator:
|
||||
files_selector,
|
||||
)
|
||||
|
||||
from clan_lib.machines.machines import Machine
|
||||
|
||||
machine = Machine(name=machine_name, flake=flake)
|
||||
pub_store = machine.public_vars_store
|
||||
sec_store = machine.secret_vars_store
|
||||
@@ -207,8 +211,6 @@ class Generator:
|
||||
if self._flake is None:
|
||||
msg = "Flake cannot be None"
|
||||
raise ClanError(msg)
|
||||
from clan_lib.machines.machines import Machine
|
||||
|
||||
machine = Machine(name=self.machine, flake=self._flake)
|
||||
output = Path(
|
||||
machine.select(
|
||||
@@ -226,8 +228,6 @@ class Generator:
|
||||
if self._flake is None:
|
||||
msg = "Flake cannot be None"
|
||||
raise ClanError(msg)
|
||||
from clan_lib.machines.machines import Machine
|
||||
|
||||
machine = Machine(name=self.machine, flake=self._flake)
|
||||
return machine.select(
|
||||
f'config.clan.core.vars.generators."{self.name}".validationHash',
|
||||
@@ -250,8 +250,6 @@ class Generator:
|
||||
Dictionary mapping generator names to their variable values
|
||||
|
||||
"""
|
||||
from clan_lib.errors import ClanError
|
||||
|
||||
generators = self.get_machine_generators([machine.name], machine.flake)
|
||||
result: dict[str, dict[str, bytes]] = {}
|
||||
|
||||
@@ -297,8 +295,6 @@ class Generator:
|
||||
Dictionary mapping prompt names to their values
|
||||
|
||||
"""
|
||||
from .prompt import ask
|
||||
|
||||
prompt_values: dict[str, str] = {}
|
||||
for prompt in self.prompts:
|
||||
var_id = f"{self.name}/{prompt.name}"
|
||||
@@ -323,17 +319,6 @@ class Generator:
|
||||
no_sandbox: Whether to disable sandboxing when executing the generator
|
||||
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
from contextlib import ExitStack
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
from clan_lib import bwrap
|
||||
from clan_lib.cmd import RunOpts, run
|
||||
from clan_lib.errors import ClanError
|
||||
from clan_lib.git import commit_files
|
||||
|
||||
if prompt_values is None:
|
||||
prompt_values = self.ask_prompts()
|
||||
|
||||
@@ -353,10 +338,6 @@ class Generator:
|
||||
|
||||
def bubblewrap_cmd(generator: str, tmpdir: Path) -> list[str]:
|
||||
"""Helper function to create bubblewrap command."""
|
||||
import shutil
|
||||
|
||||
from clan_lib.nix import nix_shell, nix_test_store
|
||||
|
||||
test_store = nix_test_store()
|
||||
real_bash_path = Path("bash")
|
||||
if os.environ.get("IN_NIX_SANDBOX"):
|
||||
@@ -414,7 +395,7 @@ class Generator:
|
||||
if sys.platform == "linux" and bwrap.bubblewrap_works():
|
||||
cmd = bubblewrap_cmd(str(final_script), tmpdir)
|
||||
elif sys.platform == "darwin":
|
||||
from clan_lib.sandbox_exec import sandbox_exec_cmd
|
||||
from clan_lib.sandbox_exec import sandbox_exec_cmd # noqa: PLC0415
|
||||
|
||||
cmd = stack.enter_context(sandbox_exec_cmd(str(final_script), tmpdir))
|
||||
else:
|
||||
|
||||
@@ -8,6 +8,7 @@ from tempfile import TemporaryDirectory
|
||||
|
||||
from clan_cli.vars._types import StoreBase
|
||||
from clan_cli.vars.generator import Generator, Var
|
||||
from clan_lib.cmd import Log, RunOpts
|
||||
from clan_lib.flake import Flake
|
||||
from clan_lib.ssh.host import Host
|
||||
from clan_lib.ssh.upload import upload
|
||||
@@ -162,8 +163,6 @@ class SecretStore(StoreBase):
|
||||
if not git_hash:
|
||||
return b""
|
||||
|
||||
from clan_cli.vars.generator import Generator
|
||||
|
||||
generators = Generator.get_machine_generators([machine], self.flake)
|
||||
manifest = [
|
||||
f"{generator.name}/{file.name}".encode()
|
||||
@@ -179,8 +178,6 @@ class SecretStore(StoreBase):
|
||||
if not local_hash:
|
||||
return True
|
||||
|
||||
from clan_lib.cmd import Log, RunOpts
|
||||
|
||||
remote_hash = host.run(
|
||||
[
|
||||
"cat",
|
||||
@@ -195,8 +192,6 @@ class SecretStore(StoreBase):
|
||||
return local_hash != remote_hash.encode()
|
||||
|
||||
def populate_dir(self, machine: str, output_dir: Path, phases: list[str]) -> None:
|
||||
from clan_cli.vars.generator import Generator
|
||||
|
||||
vars_generators = Generator.get_machine_generators([machine], self.flake)
|
||||
if "users" in phases:
|
||||
with tarfile.open(
|
||||
|
||||
@@ -54,7 +54,7 @@ class SecretStore(StoreBase):
|
||||
def ensure_machine_key(self, machine: str) -> None:
|
||||
"""Ensure machine has sops keys initialized."""
|
||||
# no need to generate keys if we don't manage secrets
|
||||
from clan_cli.vars.generator import Generator
|
||||
from clan_cli.vars.generator import Generator # noqa: PLC0415
|
||||
|
||||
vars_generators = Generator.get_machine_generators([machine], self.flake)
|
||||
if not vars_generators:
|
||||
@@ -141,7 +141,7 @@ class SecretStore(StoreBase):
|
||||
|
||||
"""
|
||||
if generators is None:
|
||||
from clan_cli.vars.generator import Generator
|
||||
from clan_cli.vars.generator import Generator # noqa: PLC0415
|
||||
|
||||
generators = Generator.get_machine_generators([machine], self.flake)
|
||||
file_found = False
|
||||
@@ -219,7 +219,7 @@ class SecretStore(StoreBase):
|
||||
return [store_folder]
|
||||
|
||||
def populate_dir(self, machine: str, output_dir: Path, phases: list[str]) -> None:
|
||||
from clan_cli.vars.generator import Generator
|
||||
from clan_cli.vars.generator import Generator # noqa: PLC0415
|
||||
|
||||
vars_generators = Generator.get_machine_generators([machine], self.flake)
|
||||
if "users" in phases or "services" in phases:
|
||||
@@ -291,7 +291,7 @@ class SecretStore(StoreBase):
|
||||
)
|
||||
|
||||
def collect_keys_for_secret(self, machine: str, path: Path) -> set[sops.SopsKey]:
|
||||
from clan_cli.secrets.secrets import (
|
||||
from clan_cli.secrets.secrets import ( # noqa: PLC0415
|
||||
collect_keys_for_path,
|
||||
collect_keys_for_type,
|
||||
)
|
||||
@@ -352,10 +352,10 @@ class SecretStore(StoreBase):
|
||||
ClanError: If the specified file_name is not found
|
||||
|
||||
"""
|
||||
from clan_cli.secrets.secrets import update_keys
|
||||
from clan_cli.secrets.secrets import update_keys # noqa: PLC0415
|
||||
|
||||
if generators is None:
|
||||
from clan_cli.vars.generator import Generator
|
||||
from clan_cli.vars.generator import Generator # noqa: PLC0415
|
||||
|
||||
generators = Generator.get_machine_generators([machine], self.flake)
|
||||
file_found = False
|
||||
|
||||
Reference in New Issue
Block a user