#!/usr/bin/env python3 """Convert a template mapfile config to a full config. We do this rendering when the container is started to allow for complete control per mapserver instance (even though there is usually only one). """ import os import sys import jinja2 sectors = "radm1 radm2 radc radf" sectors = os.getenv("WMS_SECTORS", sectors).split(" ") products = ["C{:02d}".format(x) for x in range(1, 17)] + ["true_color"] products = os.getenv("WMS_PRODUCTS", " ".join(products)).split(" ") platforms = "g16 g17" platforms = os.getenv("WMS_PLATFORMS", platforms).split(" ") layer_base_dir = os.environ['LAYER_BASE_DIR'] SECTOR_LONG_NAMES = { 'radm1': 'Mesoscale 1', 'radm2': 'Mesoscale 2', 'radc': 'CONUS', 'radf': 'Full disk', } PLATFORM_LONG_NAMES = { 'g16': 'GOES-16', 'g17': 'GOES-17', } PLATFORM_EPSGS = { 'g16': 'EPSG:930916', 'g17': 'EPSG:930917', } PLATFORM_POS_NAMES = { 'g16': 'GOES-EAST', 'g17': 'GOES-WEST', } LAYER_TO_FORMAT = { 'C01': 'gray', 'true_color': 'rgba' } def main(): import argparse parser = argparse.ArgumentParser(description="Render mapfile template to complete mapfile config.") parser.add_argument("template_fn", help="Template XML file to render") parser.add_argument('output_pattern', help='Format string for each output mapfiles.') args = parser.parse_args() for platform in platforms: for sector in sectors: tmpl_vars = { 'sector': sector, 'platform': platform, 'products': products, 'layer_base_dir': layer_base_dir, 'platform_long_name': PLATFORM_LONG_NAMES[platform], 'sector_long_name': SECTOR_LONG_NAMES[sector], 'projection': "init=" + PLATFORM_EPSGS[platform].lower(), 'epsg_code': PLATFORM_EPSGS[platform].replace('EPSG:', ''), 'PLATFORM_EPSGS': PLATFORM_EPSGS, 'PLATFORM_POS_NAMES': PLATFORM_POS_NAMES, 'postgis_connection_params': None, # TODO } output_fn = args.output_pattern.format(**tmpl_vars) with open(args.template_fn, 'r') as tmpl_file, open(output_fn, 'w') as mapfile: template = jinja2.Template(tmpl_file.read()) mapfile.write(template.render(tmpl_vars)) if __name__ == "__main__": sys.exit(main())