legen / legen_cli.py
RafaG's picture
Upload 31 files
f0cf837 verified
"""Console entry point for the LeGen CLI."""
from __future__ import annotations
import importlib
import sys
from typing import Sequence
_LEGACY_WARNING = (
"Warning: running legacy LeGen CLI fallback because the installed package "
"does not expose a 'main' entrypoint. Please upgrade to the latest release."
)
def _restore_sys_argv(original: list[str] | None) -> None:
if original is not None:
sys.argv = original
def main(argv: Sequence[str] | None = None) -> None:
"""Run the packaged LeGen CLI and propagate its exit code."""
forwarded_args = list(argv) if argv is not None else None
original_sys_argv: list[str] | None = None
if forwarded_args is not None:
# Mirror invocation semantics for callers that provide their own argv.
original_sys_argv = sys.argv.copy()
program_name = original_sys_argv[0] if original_sys_argv else "legen"
sys.argv = [program_name, *map(str, forwarded_args)]
try:
module = importlib.import_module("legen")
except Exception:
_restore_sys_argv(original_sys_argv)
raise
entrypoint = getattr(module, "main", None)
if callable(entrypoint):
try:
exit_code = entrypoint(forwarded_args)
finally:
_restore_sys_argv(original_sys_argv)
if exit_code not in (None, 0):
sys.exit(exit_code)
return
_restore_sys_argv(original_sys_argv)
# Legacy fallback: old packaged versions executed their CLI logic on import.
# At this point the module has already run using sys.argv, so avoid crashing
# with ImportError and exit gracefully instead.
print(_LEGACY_WARNING, file=sys.stderr)
if __name__ == "__main__": # pragma: no cover
main()