From 7a354875c9d64289e1bc81a9f63fc8b1b2e03396 Mon Sep 17 00:00:00 2001 From: Qubasa Date: Mon, 23 Oct 2023 01:23:06 +0200 Subject: [PATCH] Fully working ui and cli --- pkgs/clan-cli/clan_cli/git.py | 88 --------------------- pkgs/clan-cli/clan_cli/tty.py | 25 ------ pkgs/clan-cli/clan_cli/webui/api_outputs.py | 49 ------------ 3 files changed, 162 deletions(-) delete mode 100644 pkgs/clan-cli/clan_cli/git.py delete mode 100644 pkgs/clan-cli/clan_cli/tty.py diff --git a/pkgs/clan-cli/clan_cli/git.py b/pkgs/clan-cli/clan_cli/git.py deleted file mode 100644 index 12ba4df..0000000 --- a/pkgs/clan-cli/clan_cli/git.py +++ /dev/null @@ -1,88 +0,0 @@ -import shlex -import subprocess -from pathlib import Path -from typing import Optional - -from clan_cli.dirs import find_git_repo_root -from clan_cli.errors import ClanError -from clan_cli.nix import nix_shell - - -# generic vcs agnostic commit function -def commit_file( - file_path: Path, - repo_dir: Optional[Path] = None, - commit_message: Optional[str] = None, -) -> None: - if repo_dir is None: - repo_dir = find_git_repo_root() - if repo_dir is None: - return - # check that the file is in the git repository and exists - if not Path(file_path).resolve().is_relative_to(repo_dir.resolve()): - raise ClanError(f"File {file_path} is not in the git repository {repo_dir}") - if not file_path.exists(): - raise ClanError(f"File {file_path} does not exist") - # generate commit message if not provided - if commit_message is None: - # ensure that mentioned file path is relative to repo - commit_message = f"Add {file_path.relative_to(repo_dir)}" - # check if the repo is a git repo and commit - if (repo_dir / ".git").exists(): - _commit_file_to_git(repo_dir, file_path, commit_message) - else: - return - - -def _commit_file_to_git(repo_dir: Path, file_path: Path, commit_message: str) -> None: - """Commit a file to a git repository. - - :param repo_dir: The path to the git repository. - :param file_path: The path to the file to commit. - :param commit_message: The commit message. - :raises ClanError: If the file is not in the git repository. - """ - cmd = nix_shell( - ["git"], - ["git", "-C", str(repo_dir), "add", str(file_path)], - ) - # add the file to the git index - try: - subprocess.run(cmd, check=True) - except subprocess.CalledProcessError as e: - raise ClanError( - f"Failed to add {file_path} to git repository {repo_dir}:\n{shlex.join(cmd)}\n exited with {e.returncode}" - ) from e - - # check if there is a diff - cmd = nix_shell( - ["git"], - ["git", "-C", str(repo_dir), "diff", "--cached", "--exit-code"], - ) - result = subprocess.run(cmd, cwd=repo_dir) - # if there is no diff, return - if result.returncode == 0: - return - - # commit only that file - cmd = nix_shell( - ["git"], - [ - "git", - "-C", - str(repo_dir), - "commit", - "-m", - commit_message, - str(file_path.relative_to(repo_dir)), - ], - ) - try: - subprocess.run( - cmd, - check=True, - ) - except subprocess.CalledProcessError as e: - raise ClanError( - f"Failed to commit {file_path} to git repository {repo_dir}:\n{shlex.join(cmd)}\n exited with {e.returncode}" - ) from e diff --git a/pkgs/clan-cli/clan_cli/tty.py b/pkgs/clan-cli/clan_cli/tty.py deleted file mode 100644 index 5d930ec..0000000 --- a/pkgs/clan-cli/clan_cli/tty.py +++ /dev/null @@ -1,25 +0,0 @@ -import sys -from typing import IO, Any, Callable - - -def is_interactive() -> bool: - """Returns true if the current process is interactive""" - return sys.stdin.isatty() and sys.stdout.isatty() - - -def color_text(code: int, file: IO[Any] = sys.stdout) -> Callable[[str], None]: - """ - Print with color if stderr is a tty - """ - - def wrapper(text: str) -> None: - if file.isatty(): - print(f"\x1b[{code}m{text}\x1b[0m", file=file) - else: - print(text, file=file) - - return wrapper - - -warn = color_text(91, file=sys.stderr) -info = color_text(92, file=sys.stderr) diff --git a/pkgs/clan-cli/clan_cli/webui/api_outputs.py b/pkgs/clan-cli/clan_cli/webui/api_outputs.py index 4b0f0ab..c25a0db 100644 --- a/pkgs/clan-cli/clan_cli/webui/api_outputs.py +++ b/pkgs/clan-cli/clan_cli/webui/api_outputs.py @@ -5,7 +5,6 @@ from pydantic import BaseModel, Field from ..async_cmd import CmdOut from ..task_manager import TaskStatus -from ..vms.inspect import VmConfig class Status(Enum): @@ -19,52 +18,4 @@ class Machine(BaseModel): status: Status -class MachineCreate(BaseModel): - name: str - -class MachinesResponse(BaseModel): - machines: list[Machine] - - -class MachineResponse(BaseModel): - machine: Machine - - -class ConfigResponse(BaseModel): - config: dict - - -class SchemaResponse(BaseModel): - schema_: dict = Field(alias="schema") - - -class VmStatusResponse(BaseModel): - error: str | None - status: TaskStatus - - -class VmCreateResponse(BaseModel): - uuid: str - - -class FlakeAttrResponse(BaseModel): - flake_attrs: list[str] - - -class VmInspectResponse(BaseModel): - config: VmConfig - - -class FlakeAction(BaseModel): - id: str - uri: str - - -class FlakeCreateResponse(BaseModel): - cmd_out: Dict[str, CmdOut] - - -class FlakeResponse(BaseModel): - content: str - actions: List[FlakeAction]