paivana

HTTP paywall reverse proxy
Log | Files | Refs | Submodules | README | LICENSE

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()