"""Run Cyclopts applications from Python scripts."""
from pathlib import Path
from typing import Annotated
from cyclopts.cli import app
from cyclopts.loader import load_app_from_script
from cyclopts.parameter import Parameter
@app.command(help_flags="")
def run(
script: Annotated[
Path,
Parameter(allow_leading_hyphen=True),
],
/,
*args: Annotated[str, Parameter(allow_leading_hyphen=True)],
):
"""Run a Cyclopts application from a Python script with dynamic shell completion.
All arguments after the script path are passed to the loaded application.
Shell completion is available. Run once to install (persistent):
``cyclopts --install-completion``
Parameters
----------
script : str
Python script path with optional ':app_object' notation.
args : str
Arguments to pass to the loaded application.
Examples
--------
Run a script:
cyclopts run myapp.py --verbose foo bar
Specify app object:
cyclopts run myapp.py:app --help
"""
if str(script) in app.help_flags:
app.help_print()
return
app_obj, _ = load_app_from_script(script)
return app_obj(args)