clan-config: unbreak + include data files
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from . import admin, secrets
|
from . import admin, config, secrets
|
||||||
from .errors import ClanError
|
from .errors import ClanError
|
||||||
from .ssh import cli as ssh_cli
|
from .ssh import cli as ssh_cli
|
||||||
|
|
||||||
@@ -20,12 +20,8 @@ def main() -> None:
|
|||||||
parser_admin = subparsers.add_parser("admin")
|
parser_admin = subparsers.add_parser("admin")
|
||||||
admin.register_parser(parser_admin)
|
admin.register_parser(parser_admin)
|
||||||
|
|
||||||
# Currently broken
|
parser_config = subparsers.add_parser("config")
|
||||||
# parser_config = subparsers.add_parser("config")
|
config.register_parser(parser_config)
|
||||||
# try:
|
|
||||||
# config.register_parser(parser_config)
|
|
||||||
# except subprocess.CalledProcessError as e:
|
|
||||||
# warn(f"The config command does not work in the nix sandbox: {e}")
|
|
||||||
|
|
||||||
parser_ssh = subparsers.add_parser("ssh", help="ssh to a remote machine")
|
parser_ssh = subparsers.add_parser("ssh", help="ssh to a remote machine")
|
||||||
ssh_cli.register_parser(parser_ssh)
|
ssh_cli.register_parser(parser_ssh)
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
# !/usr/bin/env python3
|
# !/usr/bin/env python3
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
import os
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@@ -9,7 +8,7 @@ from typing import Any, Optional, Type, Union
|
|||||||
|
|
||||||
from clan_cli.errors import ClanError
|
from clan_cli.errors import ClanError
|
||||||
|
|
||||||
CLAN_FLAKE = os.getenv("CLAN_FLAKE")
|
script_dir = Path(__file__).parent
|
||||||
|
|
||||||
|
|
||||||
class Kwargs:
|
class Kwargs:
|
||||||
@@ -23,14 +22,14 @@ class Kwargs:
|
|||||||
|
|
||||||
|
|
||||||
def schema_from_module_file(
|
def schema_from_module_file(
|
||||||
file: Union[str, Path] = "./tests/config/example-interface.nix",
|
file: Union[str, Path] = f"{script_dir}/jsonschema/example-schema.json",
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
absolute_path = Path(file).absolute()
|
absolute_path = Path(file).absolute()
|
||||||
# define a nix expression that loads the given module file using lib.evalModules
|
# define a nix expression that loads the given module file using lib.evalModules
|
||||||
nix_expr = f"""
|
nix_expr = f"""
|
||||||
let
|
let
|
||||||
lib = import <nixpkgs/lib>;
|
lib = import <nixpkgs/lib>;
|
||||||
slib = import {CLAN_FLAKE}/lib/jsonschema.nix {{inherit lib;}};
|
slib = import {script_dir}/jsonschema {{inherit lib;}};
|
||||||
in
|
in
|
||||||
slib.parseModule {absolute_path}
|
slib.parseModule {absolute_path}
|
||||||
"""
|
"""
|
||||||
@@ -44,7 +43,7 @@ def schema_from_module_file(
|
|||||||
|
|
||||||
def register_parser(
|
def register_parser(
|
||||||
parser: argparse.ArgumentParser,
|
parser: argparse.ArgumentParser,
|
||||||
file: Path = Path("./tests/config/example-interface.nix"),
|
file: Path = Path(f"{script_dir}/jsonschema/example-schema.json"),
|
||||||
) -> None:
|
) -> None:
|
||||||
if file.name.endswith(".nix"):
|
if file.name.endswith(".nix"):
|
||||||
schema = schema_from_module_file(file)
|
schema = schema_from_module_file(file)
|
||||||
@@ -74,6 +73,7 @@ def _register_parser(
|
|||||||
"string": str,
|
"string": str,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if parser is None:
|
||||||
parser = argparse.ArgumentParser(description=schema.get("description"))
|
parser = argparse.ArgumentParser(description=schema.get("description"))
|
||||||
|
|
||||||
subparsers = parser.add_subparsers(
|
subparsers = parser.add_subparsers(
|
||||||
|
|||||||
1
pkgs/clan-cli/clan_cli/config/jsonschema
Symbolic link
1
pkgs/clan-cli/clan_cli/config/jsonschema
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../lib/jsonschema
|
||||||
@@ -40,11 +40,16 @@ python3.pkgs.buildPythonPackage {
|
|||||||
];
|
];
|
||||||
propagatedBuildInputs = dependencies;
|
propagatedBuildInputs = dependencies;
|
||||||
|
|
||||||
|
preBuild = ''
|
||||||
|
rm ./clan_cli/config/jsonschema
|
||||||
|
cp -r ${self}/lib/jsonschema ./clan_cli/config/jsonschema
|
||||||
|
'';
|
||||||
|
|
||||||
passthru.tests = {
|
passthru.tests = {
|
||||||
clan-mypy = runCommand "clan-mypy" { } ''
|
clan-mypy = runCommand "clan-mypy" { } ''
|
||||||
cp -r ${./.} ./src
|
cp -r ${self} ./flake
|
||||||
chmod +w -R ./src
|
chmod +w -R ./flake
|
||||||
cd src
|
cd ./flake/pkgs/clan-cli
|
||||||
${checkPython}/bin/mypy .
|
${checkPython}/bin/mypy .
|
||||||
touch $out
|
touch $out
|
||||||
'';
|
'';
|
||||||
@@ -52,9 +57,9 @@ python3.pkgs.buildPythonPackage {
|
|||||||
{
|
{
|
||||||
nativeBuildInputs = [ age zerotierone bubblewrap sops nix ];
|
nativeBuildInputs = [ age zerotierone bubblewrap sops nix ];
|
||||||
} ''
|
} ''
|
||||||
cp -r ${./.} ./src
|
cp -r ${self} ./flake
|
||||||
chmod +w -R ./src
|
chmod +w -R ./flake
|
||||||
cd src
|
cd ./flake/pkgs/clan-cli
|
||||||
${checkPython}/bin/python -m pytest ./tests
|
${checkPython}/bin/python -m pytest ./tests
|
||||||
touch $out
|
touch $out
|
||||||
'';
|
'';
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ description = "cLAN CLI tool"
|
|||||||
dynamic = [ "version" ]
|
dynamic = [ "version" ]
|
||||||
scripts = { clan = "clan_cli:main" }
|
scripts = { clan = "clan_cli:main" }
|
||||||
|
|
||||||
[tool.setuptools.packages]
|
[tool.setuptools.package-data]
|
||||||
find = {}
|
clan_cli = ["config/jsonschema/*"]
|
||||||
|
|
||||||
[tool.pytest.ini_options]
|
[tool.pytest.ini_options]
|
||||||
addopts = "--cov . --cov-report term --cov-report html:.reports/html --no-cov-on-fail"
|
addopts = "--cov . --cov-report term --cov-report html:.reports/html --no-cov-on-fail"
|
||||||
|
|||||||
Reference in New Issue
Block a user