-
David Hoese authoredDavid Hoese authored
render.py 2.40 KiB
#!/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())