Source code for kmcpy.cli.main

"""Top-level ``kmcpy`` CLI with subcommands."""

from __future__ import annotations

import argparse
from typing import Sequence

from kmcpy.cli.init import DEFAULT_TEMPLATE_FILENAME, write_template


[docs] def build_parser() -> argparse.ArgumentParser: """Build the top-level ``kmcpy`` parser.""" parser = argparse.ArgumentParser( prog="kmcpy", description="kMCpy command-line tools", ) subparsers = parser.add_subparsers(dest="command", required=True) init_parser = subparsers.add_parser( "init", help="Generate a commented YAML template for a KMC simulation.", ) init_parser.add_argument( "-o", "--output", default=DEFAULT_TEMPLATE_FILENAME, help=f"Output YAML path (default: {DEFAULT_TEMPLATE_FILENAME})", ) init_parser.add_argument( "-f", "--force", action="store_true", help="Overwrite output file if it already exists.", ) return parser
[docs] def main(argv: Sequence[str] | None = None) -> int: """Entry point for ``kmcpy`` command.""" parser = build_parser() args = parser.parse_args(argv) if args.command == "init": output_path = write_template(args.output, force=args.force) print(f"Template written to: {output_path}") print(f"Next step: run_kmc --input {output_path}") return 0 parser.error(f"Unknown command: {args.command}") return 2
if __name__ == "__main__": raise SystemExit(main())