Add init init-global

This commit is contained in:
Roland Thomas Jr 2025-05-04 20:13:25 -04:00
parent f9cb9ebaef
commit a90c447d5c
Signed by: roland
GPG Key ID: 7C3C2B085A4C2872
6 changed files with 110 additions and 7 deletions

View File

@ -16,8 +16,6 @@ from .hook_manager import HookType
logger = logging.getLogger("falyx") logger = logging.getLogger("falyx")
__version__ = "0.1.0"
__all__ = [ __all__ = [
"Action", "Action",
"ChainedAction", "ChainedAction",

View File

@ -7,11 +7,12 @@ Licensed under the MIT License. See LICENSE file for details.
import asyncio import asyncio
import sys import sys
from argparse import Namespace
from pathlib import Path from pathlib import Path
from falyx.config import loader from falyx.config import loader
from falyx.falyx import Falyx from falyx.falyx import Falyx
from falyx.parsers import get_arg_parsers from falyx.parsers import FalyxParsers, get_arg_parsers
def find_falyx_config() -> Path | None: def find_falyx_config() -> Path | None:
@ -32,12 +33,39 @@ def bootstrap() -> Path | None:
return config_path return config_path
def parse_args() -> Namespace:
falyx_parsers: FalyxParsers = get_arg_parsers()
init_parser = falyx_parsers.subparsers.add_parser(
"init", help="Create a new Falyx CLI project"
)
init_parser.add_argument("name", nargs="?", default=".", help="Project directory")
falyx_parsers.subparsers.add_parser(
"init-global", help="Set up ~/.config/falyx with example tasks"
)
return falyx_parsers.parse_args()
def main() -> None: def main() -> None:
args = parse_args()
if args.command == "init":
from falyx.init import init_project
init_project(args.name)
return
if args.command == "init-global":
from falyx.init import init_global
init_global()
return
bootstrap_path = bootstrap() bootstrap_path = bootstrap()
if not bootstrap_path: if not bootstrap_path:
print("No Falyx config file found. Exiting.") print("No Falyx config file found. Exiting.")
return None return None
args = get_arg_parsers().parse_args()
flx = Falyx( flx = Falyx(
title="🛠️ Config-Driven CLI", title="🛠️ Config-Driven CLI",
cli_args=args, cli_args=args,

75
falyx/init.py Normal file
View File

@ -0,0 +1,75 @@
# Falyx CLI Framework — (c) 2025 rtj.dev LLC — MIT Licensed
from pathlib import Path
from rich.console import Console
TEMPLATE_TASKS = """\
async def build():
print("🔨 Building project...")
async def test():
print("🧪 Running tests...")
"""
TEMPLATE_CONFIG = """\
- key: B
description: Build the project
action: tasks.build
aliases: [build]
spinner: true
- key: T
description: Run tests
action: tasks.test
aliases: [test]
spinner: true
"""
console = Console(color_system="auto")
def init_project(name: str = "."):
target = Path(name).resolve()
target.mkdir(parents=True, exist_ok=True)
tasks_path = target / "tasks.py"
config_path = target / "falyx.yaml"
if tasks_path.exists() or config_path.exists():
console.print(f"⚠️ Project already initialized at {target}")
return
tasks_path.write_text(TEMPLATE_TASKS)
config_path.write_text(TEMPLATE_CONFIG)
print(f"✅ Initialized Falyx project in {target}")
def init_global():
config_dir = Path.home() / ".config" / "falyx"
config_dir.mkdir(parents=True, exist_ok=True)
tasks_path = config_dir / "tasks.py"
config_path = config_dir / "falyx.yaml"
if tasks_path.exists() or config_path.exists():
console.print("⚠️ Global Falyx config already exists at ~/.config/falyx")
return
tasks_path.write_text(
"""\
async def cleanup():
print("🧹 Cleaning temp files...")
"""
)
config_path.write_text(
"""\
- key: C
description: Cleanup temp files
action: tasks.cleanup
aliases: [clean, cleanup]
"""
)
console.print("✅ Initialized global Falyx config at ~/.config/falyx")

View File

@ -2,7 +2,7 @@
"""parsers.py """parsers.py
This module contains the argument parsers used for the Falyx CLI. This module contains the argument parsers used for the Falyx CLI.
""" """
from argparse import ArgumentParser, HelpFormatter, Namespace from argparse import ArgumentParser, Namespace, _SubParsersAction
from dataclasses import asdict, dataclass from dataclasses import asdict, dataclass
from typing import Any, Sequence from typing import Any, Sequence
@ -12,6 +12,7 @@ class FalyxParsers:
"""Defines the argument parsers for the Falyx CLI.""" """Defines the argument parsers for the Falyx CLI."""
root: ArgumentParser root: ArgumentParser
subparsers: _SubParsersAction
run: ArgumentParser run: ArgumentParser
run_all: ArgumentParser run_all: ArgumentParser
preview: ArgumentParser preview: ArgumentParser
@ -151,6 +152,7 @@ def get_arg_parsers(
return FalyxParsers( return FalyxParsers(
root=parser, root=parser,
subparsers=subparsers,
run=run_parser, run=run_parser,
run_all=run_all_parser, run_all=run_all_parser,
preview=preview_parser, preview=preview_parser,

View File

@ -1 +1 @@
__version__ = "0.1.11" __version__ = "0.1.12"

View File

@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "falyx" name = "falyx"
version = "0.1.11" version = "0.1.12"
description = "Reliable and introspectable async CLI action framework." description = "Reliable and introspectable async CLI action framework."
authors = ["Roland Thomas Jr <roland@rtj.dev>"] authors = ["Roland Thomas Jr <roland@rtj.dev>"]
license = "MIT" license = "MIT"