diff --git a/bin/fws2dot b/bin/fws2dot new file mode 100755 index 0000000000000000000000000000000000000000..67f36948ce054826100e4cb47b60f925661cc5ac --- /dev/null +++ b/bin/fws2dot @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +"""converter from fireworks to graphviz dot for visualization purposes""" +import argparse +from fireworks.fw_config import LAUNCHPAD_LOC +from fireworks.fw_config import CONFIG_FILE_DIR +from fireworks.scripts.lpad_run import get_lp +from fireworks.utilities.dagflow import DAGFlow + + +def id_type(value): + """check the type of fw_id""" + rvalue = int(value) + if rvalue < 0: + msg = f'{value} must have non-negative int value' + raise argparse.ArgumentTypeError(msg) + return rvalue + + +def parse_clargs(): + """parse the command line arguments for the script""" + m_description = 'Converts a FireWorks workflow to graphviz DOT format' + parser = argparse.ArgumentParser(description=m_description) + parser.add_argument('-c', '--config_dir', + help='path to configuration file (if -l unspecified)', + default=CONFIG_FILE_DIR) + parser.add_argument('-l', '--launchpad_file', + help='path to launchpad file', default=LAUNCHPAD_LOC) + parser.add_argument('-f', '--filename', required=False, + help='filename for output', default='wf.dot') + parser.add_argument('-v', '--view', default='combined', required=False, + help='View: one of controlflow, dataflow, combined') + parser.add_argument('-i', '--fw_id', default=False, required=True, + help='firework id', type=id_type) + return parser.parse_args() + + +def main(): + """main function""" + clargs = parse_clargs() + dag = DAGFlow.from_fireworks(get_lp(clargs).get_wf_by_fw_id(clargs.fw_id)) + dag.to_dot(filename=clargs.filename, view=clargs.view) + + +if __name__ == '__main__': + main()