Guest User

Untitled

a guest
Feb 24th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. #!/bin/env python3.6
  2.  
  3. import os, sys, json
  4.  
  5. from argparse import ArgumentParser
  6.  
  7.  
  8. def main():
  9. parser = ArgumentParser(description='Python template expander. \
  10. Make a template with a format string syntax and environment vars, arguments and config file vars are expanded.')
  11.  
  12. parser.add_argument('input', nargs='?',
  13. help='Input file')
  14.  
  15. parser.add_argument('--var', action='append', default=[],
  16. help='Variable key[=value] pair')
  17.  
  18. parser.add_argument('--conf', action='append', default=[],
  19. help='Json file with vars in it')
  20.  
  21. args = parser.parse_args()
  22.  
  23. var = os.environ.copy()
  24.  
  25. for e in args.var:
  26. if '=' in e:
  27. (k, v) = e.split('=')
  28. else:
  29. (k, v) = e, "1"
  30. var[k] = v
  31.  
  32. for f in args.conf:
  33. var.update(json.load(open(f)))
  34.  
  35. # replace dash with underscore because python vars can't have dashes, but vars can
  36. var = {k.replace("-", "_"): v for k, v in var.items()}
  37.  
  38. if args.input is None:
  39. inf = sys.stdin
  40. else:
  41. inf = open(args.input)
  42.  
  43. ind = inf.read()
  44.  
  45. ind.replace('\\', '\\\\')
  46. ind.replace('"""', '\\"\\"\\"')
  47.  
  48. ind = 'f"""' + ind + '"""'
  49.  
  50. def ifdef(and_vars, if_val, else_val=""):
  51. if isinstance(and_vars, str):
  52. and_vars = [and_vars]
  53.  
  54. for v in and_vars:
  55. if v not in var:
  56. return else_val
  57.  
  58. return if_val
  59.  
  60. var["ifdef"] = ifdef
  61.  
  62. ind = eval(ind, {}, var)
  63. print(ind)
  64.  
  65.  
  66. if __name__ == "__main__":
  67. main()
Add Comment
Please, Sign In to add comment