Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import argparse
- import errno
- import os
- import sys
- from jinja2 import Environment, FileSystemLoader, StrictUndefined
- UTF8 = 'utf8'
- TEMPLATE = 'template'
- def parse_option(sys_args):
- parser = argparse.ArgumentParser(
- description='Generate a configuration combining templates',
- formatter_class=argparse.RawTextHelpFormatter
- )
- parser.add_argument('--input_folder', '-i', required=True, help='Input folder')
- parser.add_argument('--output_folder', '-o', required=True, help='Output folder')
- return parser, parser.parse_args(sys_args)
- def create_directory(filename):
- try:
- os.makedirs(os.path.dirname(filename))
- except OSError as exc: # Guard against race condition
- if exc.errno != errno.EEXIST:
- raise
- def chop(value, ending):
- if value.endswith(ending):
- return value[:-len(ending)]
- return value
- def generate_template(template, output_folder):
- template_content = template.render(os.environ)
- target_file = os.path.join(output_folder, template.name)
- target_file = chop(target_file, '.template')
- create_directory(target_file)
- with open(target_file, 'w') as writer:
- writer.write(template_content)
- def main(args=None):
- if args is None:
- args = sys.argv[1:]
- parser, args = parse_option(args)
- file_system_loader = FileSystemLoader(args.input_folder)
- env = Environment(
- loader=file_system_loader,
- undefined=StrictUndefined # Fails if it tries to render undefined values
- )
- templates = [env.get_template(template_path) for template_path in env.list_templates()
- if template_path.endswith(TEMPLATE) or TEMPLATE not in template_path]
- for template in templates:
- generate_template(template, args.output_folder)
- if __name__ == "__main__":
- main()
Add Comment
Please, Sign In to add comment