Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
parset_concat.py 2.22 KiB
#!/usr/bin/env python3
import sys
import os
import re
import logging
from argparse import ArgumentParser
## TODO add input validation


def parse_arguments(args):
    parser = ArgumentParser(description='Concatenate step defined to the input parset')
    parser.add_argument('step_name', help='name of the step')
    parser.add_argument('step_type', help='type of the step')
    parser.add_argument('--input_parset', default=None, help='input parset')
    parser.add_argument('step_arguments', help='step arguments', nargs='*')

    return parser.parse_args()


def main(args):
    arguments = parse_arguments(args)
    concatenate(arguments.input_parset,
                arguments.step_name,
                arguments.step_type,
                arguments.step_arguments)


def concatenate(lines, step_name, step_type, step_args):
    """
    Append a new step to existing parset. Output is printed to stdout.

    Args:
        lines (List[str]): list of existing lines
        step_name (str): name of new step
        step_type (str): type of new step
        step_args (List[str]): key-value pairs, e.g. ["applybeam=true"]

    Returns:
        None
    """
    steps = []
    if lines:
        for line in lines:
            if line.startswith("steps="):
                _, steps = line.split("=")
                steps = [step for step in steps.strip().lstrip("[").rstrip("]").split(",") if step]
            else:
                print(line)

    print("%s.type=%s" % (step_name, step_type))
    if step_args:
        for arg in step_args:
            if not '=' in arg:
                logging.error('Argument invalid (e.g. key=value): %s', arg)
                sys.exit(1)
            key = '.'.join([step_name, arg.strip()])
            print(key)

    if step_name in steps:
        logging.error('Step named %s already present in steps: %s', step_name, steps)
        exit(1)
    else:
        steps += [step_name]
    print("steps=[%s]" % ",".join(steps))


def concatenate_file(parsetfile, step_name, step_type, args):
    print(args)
    if parsetfile and os.path.exists(parsetfile):
      with open(parsetfile, "r") as f_stream:
          concatenate(f_stream.read().splitlines(), step_name, step_type, args)


if __name__=='__main__':
    main(sys.argv)