Files
OpenBB/cookiecutter/openbb_cookiecutter/cli.py
Danglewood b46bfadba7 [Feature] openbb-cookiecutter: Extension Template (#7261)
* add openbb-cookiecutter to repo

* typo

* review items

* some fixes

* missing annotation

* duplicate ignore in pylintrc

* protected access

---------

Co-authored-by: Theodore Aptekarev <aptekarev@gmail.com>
Co-authored-by: deeleeramone <>
2025-11-07 18:51:18 +00:00

77 lines
2.0 KiB
Python

"""CLI for OpenBB Cookiecutter template."""
# pylint: disable=W0718
import argparse
import sys
from cookiecutter.main import cookiecutter
from . import get_template_path
def main(argv: list | None = None) -> int:
"""Run the OpenBB cookiecutter template.
Args:
argv: Command line arguments (defaults to sys.argv[1:])
Returns:
Exit code (0 for success, non-zero for error)
"""
parser = argparse.ArgumentParser(
description="Generate an OpenBB Platform extension from template"
)
parser.add_argument(
"-o",
"--output-dir",
default=".",
help="Where to output the generated project (default: current directory)",
)
parser.add_argument(
"--no-input",
action="store_true",
help="Do not prompt for parameters and use defaults",
)
parser.add_argument(
"-f", "--overwrite-if-exists", action="store_true", help="Overwrite if exists"
)
parser.add_argument(
"--extra-context",
action="append",
metavar="KEY=VALUE",
help="Extra context variables (can be used multiple times)",
)
args = parser.parse_args(argv)
# Build extra context from arguments
extra_context = {}
if args.extra_context:
for item in args.extra_context:
if "=" not in item:
print(f"Error: extra-context must be in KEY=VALUE format: {item}")
return 1
key, value = item.split("=", 1)
extra_context[key] = value
# Get the bundled template path
template_path = get_template_path()
try:
cookiecutter(
str(template_path),
output_dir=args.output_dir,
no_input=args.no_input,
overwrite_if_exists=args.overwrite_if_exists,
extra_context=extra_context if extra_context else None,
)
return 0
except Exception as e:
print(f"Error: {e}", file=sys.stderr) # noqa
return 1
if __name__ == "__main__":
sys.exit(main())