Files
fsr_generator/helpers/sequencer.py
2022-03-16 15:22:36 +01:00

70 lines
2.0 KiB
Python
Executable File

#!/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)