generate-paywall.py (1278B)
1 #!/usr/bin/env python3 2 import sys 3 import os 4 import jinja2 5 6 7 def main(): 8 if len(sys.argv) < 3: 9 print(f"Usage: {sys.argv[0]} <input_template> <output_file>", file=sys.stderr) 10 sys.exit(1) 11 12 input_template = sys.argv[1] 13 output_file = sys.argv[2] 14 15 # We resolve included files relative to the input template's directory. 16 search_dir = os.path.dirname(os.path.abspath(input_template)) 17 18 # Set up jinja2 environment with custom delimiters. 19 # Delimiters are changed to avoid conflict with Mustache tags like {{ merchant_backend }}. 20 env = jinja2.Environment( 21 loader=jinja2.FileSystemLoader(search_dir), 22 variable_start_string="@@", 23 variable_end_string="@@", 24 block_start_string="@<", 25 block_end_string=">@", 26 comment_start_string="@#", 27 comment_end_string="#@", 28 ) 29 30 template_name = os.path.basename(input_template) 31 template = env.get_template(template_name) 32 33 rendered = template.render() 34 35 # Ensure parent directory of output_file exists (especially in build directories). 36 os.makedirs(os.path.dirname(os.path.abspath(output_file)), exist_ok=True) 37 38 with open(output_file, "w", encoding="utf-8") as f: 39 f.write(rendered) 40 41 42 if __name__ == "__main__": 43 main()