Skip to content
Snippets Groups Projects
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())