import argparse
import os
import pkgutil
import subprocess
[docs]
def list_scripts(directory):
return [name for _, name, _ in pkgutil.iter_modules([directory])]
[docs]
class ListScriptsAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
print("Available scripts:")
for script in list_scripts(os.path.dirname(__file__)):
script_path = os.path.join(os.path.dirname(__file__), f"{script}.py")
print(f"\n{script} ({script_path})")
try:
subprocess.run(["python", script_path, "-h"], check=True)
except subprocess.CalledProcessError:
print(f"Failed to run --help on {script}")
parser.exit()
[docs]
def main():
parser = argparse.ArgumentParser(
description="ytScripts Plot Data Packages",
usage="%(prog)s script [script_args] [-h] [-l]",
)
parser.add_argument(
"script",
nargs="?",
help="Name of the script to run within the plot_data package",
)
parser.add_argument(
"-l", "--list", nargs=0, help="List available scripts", action=ListScriptsAction
)
args, script_args = parser.parse_known_args()
if args.script:
print(f"Running {args.script} script with args: {script_args}")
script_path = os.path.join(os.path.dirname(__file__), f"{args.script}.py")
try:
subprocess.run(["python", script_path] + script_args, check=True)
except subprocess.CalledProcessError:
print(f"Failed to run {args.script} with args: {script_args}")