Add SQL and default value support for layers

This commit is contained in:
lukasmartinelli 2016-10-09 21:27:43 +02:00
parent 480d720585
commit 4292f5ed91

View File

@ -2,6 +2,7 @@
""" """
Usage: Usage:
omtgen tm2source <tileset> [--host=<host>] [--port=<port>] [--database=<dbname>] [--user=<user>] [--password=<pw>] omtgen tm2source <tileset> [--host=<host>] [--port=<port>] [--database=<dbname>] [--user=<user>] [--password=<pw>]
omtgen dump-sql <tileset>
omtgen --help omtgen --help
omtgen --version omtgen --version
Options: Options:
@ -13,6 +14,7 @@ Options:
--user=<user> PostGIS user. --user=<user> PostGIS user.
--password=<pw> PostGIS password. --password=<pw> PostGIS password.
""" """
import os
import sys import sys
import yaml import yaml
import collections import collections
@ -22,17 +24,17 @@ DbParams = collections.namedtuple('DbParams', ['dbname', 'host', 'port',
'password', 'user']) 'password', 'user'])
def generate_layer(layer_def, db_params): def generate_layer(layer_def, layer_defaults, db_params):
layer = layer_def['layer'] layer = layer_def['layer']
datasource = layer['datasource'] datasource = layer['datasource']
tm2layer = { tm2layer = {
'id': layer['id'], 'id': layer['id'],
'description': layer['description'], 'description': layer['description'],
'srs': layer['srs'], 'srs': layer.get('srs', layer_defaults['srs']),
'properties': { 'properties': {
'buffer-size': layer['buffer_size'] 'buffer-size': layer['buffer_size']
}, },
'fields': layer['fields'], 'fields': layer.get('fields', []),
'Datasource': { 'Datasource': {
'extent': [-20037508.34, -20037508.34, 20037508.34, 20037508.34], 'extent': [-20037508.34, -20037508.34, 20037508.34, 20037508.34],
'geometry_field': datasource.get('geometry_field', 'geom'), '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', ''), 'key_field_as_attribute': datasource.get('key_field_as_attribute', ''),
'max_size': datasource.get('max_size', 512), 'max_size': datasource.get('max_size', 512),
'port': db_params.port, 'port': db_params.port,
'srid': datasource['srid'], 'srid': datasource.get('srid', layer_defaults['datasource']['srid']),
'table': datasource['query'], 'table': datasource['query'],
'type': 'postgis', 'type': 'postgis',
'host': db_params.host, 'host': db_params.host,
@ -52,15 +54,37 @@ def generate_layer(layer_def, db_params):
return tm2layer return tm2layer
def generate_tm2source(tileset_filename, db_params): def parse_tileset(filename):
with open(tileset_filename, 'r') as stream: with open(filename, 'r') as stream:
try: try:
tileset = yaml.load(stream)['tileset'] return yaml.load(stream)['tileset']
except yaml.YAMLError as e: except yaml.YAMLError as e:
print('Could not parse ' + tileset_filename) print('Could not parse ' + filename)
print(e) print(e)
sys.exit(403) 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 = { tm2 = {
'attribution': tileset['attribution'], 'attribution': tileset['attribution'],
'center': tileset['center'], 'center': tileset['center'],
@ -75,7 +99,7 @@ def generate_tm2source(tileset_filename, db_params):
with open(layer_filename, 'r') as stream: with open(layer_filename, 'r') as stream:
try: try:
layer_def = yaml.load(stream) 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) tm2['Layer'].append(tm2layer)
except yaml.YAMLError as e: except yaml.YAMLError as e:
print('Could not parse ' + layer_filename) print('Could not parse ' + layer_filename)
@ -96,3 +120,6 @@ if __name__ == '__main__':
) )
tm2 = generate_tm2source(args['<tileset>'], db_params) tm2 = generate_tm2source(args['<tileset>'], db_params)
print(yaml.dump(tm2)) print(yaml.dump(tm2))
if args.get('dump-sql'):
sql = collect_sql(args['<tileset>'])
print(sql)