#!/usr/bin/python3 import sys import argparse import subprocess import os import importlib.machinery import generate import util class BuiltinActions: @staticmethod def generate(*args): generate.main(["--config", config_path, *args]) @staticmethod def external(*args): subprocess.run(args, check=True) def dispatch(action, args=[]): if package_actions and action in dir(package_actions): getattr(package_actions, action)(config, *args) elif action in dir(BuiltinActions): getattr(BuiltinActions, action)(*args) elif action in config["sequencer"]: for item in config["sequencer"][action]: ilist = item.split() if not ilist[0] in cliargs.skip: dispatch(ilist[0], ilist[1:]) else: raise ValueError(f"Action {action} not found") if __name__ == "__main__": commandname = sys.argv[0].split("/")[-1] using_alias = commandname != "sequencer.py" parser = argparse.ArgumentParser() parser.add_argument("--config", "-c", default=util.CONFIG_FILE) parser.add_argument("--skip", action='append') if not using_alias: parser.add_argument("action", nargs="?") cliargs = parser.parse_args() if cliargs.skip is None: cliargs.skip = [] config_path = util.get_normalized_config_path(cliargs.config) config_path = os.path.abspath(config_path) original_working_dir = os.getcwd() normalized_working_dir = original_working_dir if os.path.dirname(config_path) != "": normalized_working_dir = os.path.dirname(config_path) os.chdir(normalized_working_dir) config = util.get_config(config_path) package_actions = None if "package_actions_file" in config: package_actions = importlib.machinery.SourceFileLoader("package_actions",config["package_actions_file"]).load_module() if using_alias: dispatch(commandname) elif cliargs.action: dispatch(cliargs.action) else: print("No action specified") sys.exit(1)