-
Tammo Jan Dijkema authoredTammo Jan Dijkema authored
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)