Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/env python3.6
- import os, sys, json
- from argparse import ArgumentParser
- def main():
- parser = ArgumentParser(description='Python template expander. \
- Make a template with a format string syntax and environment vars, arguments and config file vars are expanded.')
- parser.add_argument('input', nargs='?',
- help='Input file')
- parser.add_argument('--var', action='append', default=[],
- help='Variable key[=value] pair')
- parser.add_argument('--conf', action='append', default=[],
- help='Json file with vars in it')
- args = parser.parse_args()
- var = os.environ.copy()
- for e in args.var:
- if '=' in e:
- (k, v) = e.split('=')
- else:
- (k, v) = e, "1"
- var[k] = v
- for f in args.conf:
- var.update(json.load(open(f)))
- # replace dash with underscore because python vars can't have dashes, but vars can
- var = {k.replace("-", "_"): v for k, v in var.items()}
- if args.input is None:
- inf = sys.stdin
- else:
- inf = open(args.input)
- ind = inf.read()
- ind.replace('\\', '\\\\')
- ind.replace('"""', '\\"\\"\\"')
- ind = 'f"""' + ind + '"""'
- def ifdef(and_vars, if_val, else_val=""):
- if isinstance(and_vars, str):
- and_vars = [and_vars]
- for v in and_vars:
- if v not in var:
- return else_val
- return if_val
- var["ifdef"] = ifdef
- ind = eval(ind, {}, var)
- print(ind)
- if __name__ == "__main__":
- main()
Add Comment
Please, Sign In to add comment