From ed171f026433a1db33998a0f846ddcd718bf2008 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Sun, 26 May 2024 15:57:10 +0200 Subject: [PATCH] Api: init response envelop --- pkgs/clan-cli/clan_cli/api/__init__.py | 20 +++++++++++++++++++- pkgs/clan-cli/clan_cli/machines/create.py | 16 +++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/pkgs/clan-cli/clan_cli/api/__init__.py b/pkgs/clan-cli/clan_cli/api/__init__.py index f7bb4d1e..501554a7 100644 --- a/pkgs/clan-cli/clan_cli/api/__init__.py +++ b/pkgs/clan-cli/clan_cli/api/__init__.py @@ -1,9 +1,27 @@ from collections.abc import Callable -from typing import Any, TypeVar +from dataclasses import dataclass +from typing import Any, Generic, Literal, TypeVar T = TypeVar("T") +ResponseDataType = TypeVar("ResponseDataType") + + +@dataclass +class ApiError: + message: str + description: str | None + location: list[str] | None + + +@dataclass +class ApiResponse(Generic[ResponseDataType]): + status: Literal["success", "error"] + errors: list[ApiError] | None + data: ResponseDataType | None + + class _MethodRegistry: def __init__(self) -> None: self._registry: dict[str, Callable] = {} diff --git a/pkgs/clan-cli/clan_cli/machines/create.py b/pkgs/clan-cli/clan_cli/machines/create.py index 711735eb..a4420600 100644 --- a/pkgs/clan-cli/clan_cli/machines/create.py +++ b/pkgs/clan-cli/clan_cli/machines/create.py @@ -1,13 +1,27 @@ import argparse import logging +from dataclasses import dataclass +from pathlib import Path +from clan_cli.api import API from clan_cli.config.machine import set_config_for_machine log = logging.getLogger(__name__) +@dataclass +class MachineCreateRequest: + name: str + config: dict + + +@API.register +def create_machine(flake_dir: str | Path, machine: MachineCreateRequest) -> None: + set_config_for_machine(Path(flake_dir), machine.name, machine.config) + + def create_command(args: argparse.Namespace) -> None: - set_config_for_machine(args.flake, args.machine, dict()) + create_machine(args.flake, MachineCreateRequest(args.machine, dict())) def register_create_parser(parser: argparse.ArgumentParser) -> None: