aides-spec/aides_spec/commands/create.py

73 lines
2.2 KiB
Python

import sys
from typing import Annotated, Optional
import typer
from aides_spec.utils.empty_template import create_from_empty_template
from aides_spec.utils.from_pkgbuild import (
PkgbuildDownloader,
create_from_pkgbuild,
)
app = typer.Typer()
def process_empty_template(output_file: str):
"""Handles creation from an empty template."""
typer.echo("Creating spec from an empty template...")
create_from_empty_template(output_file)
def process_from_aur(package_name: str, output_file: str):
"""Handles creation from an AUR package."""
typer.echo(
f"Downloading PKGBUILD for package '{package_name}' from AUR..."
)
try:
content = PkgbuildDownloader.download_and_extract(package_name)
create_from_pkgbuild(content, output_file)
except Exception as e:
typer.echo(
f"Error downloading PKGBUILD for '{package_name}': {e}", err=True
)
sys.exit(1)
def process_from_pkgbuild(file_path: str, output_file: str):
"""Handles creation from a local PKGBUILD file."""
typer.echo(f"Reading PKGBUILD from local file '{file_path}'...")
try:
with open(file_path, "rb") as f:
content = f.read()
create_from_pkgbuild(content, output_file)
except IOError as e:
typer.echo(f"Error reading file '{file_path}': {e}", err=True)
sys.exit(1)
@app.command(help="Create spec (empty, from PKGBUILD or AUR)")
def create(
from_aur: Annotated[
Optional[str], typer.Option(help="Package name to fetch from AUR")
] = None,
from_pkgbuild: Annotated[
Optional[str], typer.Option(help="Path to local PKGBUILD file")
] = None,
empty_template: Annotated[
Optional[bool], typer.Option(help="Create spec from an empty template")
] = None,
):
"""Main function to handle spec creation."""
output_file = "alr.sh"
if empty_template:
process_empty_template(output_file)
elif from_aur:
process_from_aur(from_aur, output_file)
elif from_pkgbuild:
process_from_pkgbuild(from_pkgbuild, output_file)
else:
typer.echo(
"No valid option provided. Use --help for usage details.", err=True
)
sys.exit(1)