From 4292f5ed91b77ff47c53e88883a188291d779cd7 Mon Sep 17 00:00:00 2001 From: lukasmartinelli Date: Sun, 9 Oct 2016 21:27:43 +0200 Subject: [PATCH] Add SQL and default value support for layers --- omtgen.py | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/omtgen.py b/omtgen.py index 9c0f3ce..9c66560 100755 --- a/omtgen.py +++ b/omtgen.py @@ -2,6 +2,7 @@ """ Usage: omtgen tm2source [--host=] [--port=] [--database=] [--user=] [--password=] + omtgen dump-sql omtgen --help omtgen --version Options: @@ -13,6 +14,7 @@ Options: --user= PostGIS user. --password= PostGIS password. """ +import os import sys import yaml import collections @@ -22,17 +24,17 @@ DbParams = collections.namedtuple('DbParams', ['dbname', 'host', 'port', 'password', 'user']) -def generate_layer(layer_def, db_params): +def generate_layer(layer_def, layer_defaults, db_params): layer = layer_def['layer'] datasource = layer['datasource'] tm2layer = { 'id': layer['id'], 'description': layer['description'], - 'srs': layer['srs'], + 'srs': layer.get('srs', layer_defaults['srs']), 'properties': { 'buffer-size': layer['buffer_size'] }, - 'fields': layer['fields'], + 'fields': layer.get('fields', []), 'Datasource': { 'extent': [-20037508.34, -20037508.34, 20037508.34, 20037508.34], 'geometry_field': datasource.get('geometry_field', 'geom'), @@ -40,7 +42,7 @@ def generate_layer(layer_def, db_params): 'key_field_as_attribute': datasource.get('key_field_as_attribute', ''), 'max_size': datasource.get('max_size', 512), 'port': db_params.port, - 'srid': datasource['srid'], + 'srid': datasource.get('srid', layer_defaults['datasource']['srid']), 'table': datasource['query'], 'type': 'postgis', 'host': db_params.host, @@ -52,15 +54,37 @@ def generate_layer(layer_def, db_params): return tm2layer -def generate_tm2source(tileset_filename, db_params): - with open(tileset_filename, 'r') as stream: +def parse_tileset(filename): + with open(filename, 'r') as stream: try: - tileset = yaml.load(stream)['tileset'] + return yaml.load(stream)['tileset'] except yaml.YAMLError as e: - print('Could not parse ' + tileset_filename) + print('Could not parse ' + filename) print(e) sys.exit(403) + +def collect_sql(tileset_filename): + tileset = parse_tileset(tileset_filename) + print(tileset) + sql = '' + for layer_filename in tileset['layers']: + with open(layer_filename, 'r') as stream: + try: + layer_def = yaml.load(stream) + for sql_filename in layer_def['schema']: + with open(os.path.join(os.path.dirname(layer_filename), sql_filename), 'r') as stream: + sql += stream.read() + except yaml.YAMLError as e: + print('Could not parse ' + layer_filename) + print(e) + sys.exit(403) + return sql + + +def generate_tm2source(tileset_filename, db_params): + tileset = parse_tileset(tileset_filename) + layer_defaults = tileset['defaults'] tm2 = { 'attribution': tileset['attribution'], 'center': tileset['center'], @@ -75,7 +99,7 @@ def generate_tm2source(tileset_filename, db_params): with open(layer_filename, 'r') as stream: try: layer_def = yaml.load(stream) - tm2layer = generate_layer(layer_def, db_params) + tm2layer = generate_layer(layer_def, layer_defaults, db_params) tm2['Layer'].append(tm2layer) except yaml.YAMLError as e: print('Could not parse ' + layer_filename) @@ -96,3 +120,6 @@ if __name__ == '__main__': ) tm2 = generate_tm2source(args[''], db_params) print(yaml.dump(tm2)) + if args.get('dump-sql'): + sql = collect_sql(args['']) + print(sql)