Guest User

Untitled

a guest
Jun 21st, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. import argparse
  2. import errno
  3. import os
  4. import sys
  5.  
  6. from jinja2 import Environment, FileSystemLoader, StrictUndefined
  7.  
  8. UTF8 = 'utf8'
  9. TEMPLATE = 'template'
  10.  
  11.  
  12. def parse_option(sys_args):
  13. parser = argparse.ArgumentParser(
  14. description='Generate a configuration combining templates',
  15. formatter_class=argparse.RawTextHelpFormatter
  16. )
  17.  
  18. parser.add_argument('--input_folder', '-i', required=True, help='Input folder')
  19. parser.add_argument('--output_folder', '-o', required=True, help='Output folder')
  20.  
  21. return parser, parser.parse_args(sys_args)
  22.  
  23.  
  24. def create_directory(filename):
  25. try:
  26. os.makedirs(os.path.dirname(filename))
  27. except OSError as exc: # Guard against race condition
  28. if exc.errno != errno.EEXIST:
  29. raise
  30.  
  31.  
  32. def chop(value, ending):
  33. if value.endswith(ending):
  34. return value[:-len(ending)]
  35. return value
  36.  
  37.  
  38. def generate_template(template, output_folder):
  39. template_content = template.render(os.environ)
  40. target_file = os.path.join(output_folder, template.name)
  41. target_file = chop(target_file, '.template')
  42. create_directory(target_file)
  43. with open(target_file, 'w') as writer:
  44. writer.write(template_content)
  45.  
  46.  
  47. def main(args=None):
  48. if args is None:
  49. args = sys.argv[1:]
  50.  
  51. parser, args = parse_option(args)
  52.  
  53. file_system_loader = FileSystemLoader(args.input_folder)
  54. env = Environment(
  55. loader=file_system_loader,
  56. undefined=StrictUndefined # Fails if it tries to render undefined values
  57. )
  58.  
  59. templates = [env.get_template(template_path) for template_path in env.list_templates()
  60. if template_path.endswith(TEMPLATE) or TEMPLATE not in template_path]
  61.  
  62. for template in templates:
  63. generate_template(template, args.output_folder)
  64.  
  65.  
  66. if __name__ == "__main__":
  67. main()
Add Comment
Please, Sign In to add comment