Skip to content

Commit 38b9451

Browse files
committed
config: make layers protected and a dict
1 parent 00787b5 commit 38b9451

File tree

2 files changed

+25
-19
lines changed

2 files changed

+25
-19
lines changed

tilekiln/config.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,18 @@ def __init__(self, yaml_string: str, filesystem: fs.base.FS):
3838
self.version = metadata.get("version")
3939
self.bounds = metadata.get("bounds")
4040
self.center = metadata.get("center")
41-
# TODO: Make private and expose needed operations through proper functions
42-
self.layers = []
41+
self.__layers = {}
4342
try:
4443
for id, l in config.get("vector_layers", {}).items():
45-
self.layers.append(LayerConfig(id, l, filesystem))
44+
lc = LayerConfig(id, l, filesystem)
45+
self.__layers[lc.id] = lc
46+
4647
except Exception:
4748
raise ConfigError("Unable to process vector_layers")
4849

49-
if self.layers:
50-
self.minzoom = min([layer.minzoom for layer in self.layers])
51-
self.maxzoom = max([layer.maxzoom for layer in self.layers])
50+
if self.__layers:
51+
self.minzoom = min([layer.minzoom for layer in self.__layers.values()])
52+
self.maxzoom = max([layer.maxzoom for layer in self.__layers.values()])
5253
else:
5354
self.minzoom = None
5455
self.maxzoom = None
@@ -71,15 +72,18 @@ def tilejson(self, url) -> str:
7172
"fields": layer.fields,
7273
"description": layer.description,
7374
"minzoom": layer.minzoom,
74-
"maxzoom": layer.maxzoom} for layer in self.layers]
75+
"maxzoom": layer.maxzoom} for layer in self.__layers.values()]
7576
result["vector_layers"] = [{k: v for k, v in layer.items() if v is not None}
7677
for layer in vector_layers]
7778

7879
return json.dumps({k: v for k, v in result.items() if v is not None},
7980
sort_keys=True, indent=4)
8081

82+
def layer_names(self):
83+
return [layer.name for layer in self.__layers.values()]
84+
8185
def layer_queries(self, tile: Tile):
82-
return list(filter(None, (layer.render_sql(tile) for layer in self.layers)))
86+
return list(filter(None, (layer.render_sql(tile) for layer in self.__layers.values())))
8387

8488

8589
class LayerConfig:

tilekiln/scripts/config.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,16 @@ def sql(config: str, layer: str, zoom: int, x: int, y: int):
4545
return 0
4646
else:
4747
# Iterate through the layers to find the right one
48-
for lc in c.layers:
49-
if lc.id == layer:
50-
sql = lc.render_sql(Tile(zoom, x, y))
51-
if sql is None:
52-
click.echo((f"Zoom {zoom} not between min zoom {lc.minzoom} "
53-
f"and max zoom {lc.maxzoom} for layer {layer}."), err=True)
54-
return 1
55-
click.echo(sql)
56-
return 0
57-
click.echo(f"Layer '{layer}' not found in configuration", err=True)
58-
return 1
48+
try:
49+
lc = c.__layers[layer]
50+
except KeyError:
51+
click.echo(f"Layer '{layer}' not found in configuration", err=True)
52+
return 1
53+
54+
sql = lc.render_sql(Tile(zoom, x, y))
55+
if sql is None:
56+
click.echo((f"Zoom {zoom} not between min zoom {lc.minzoom} "
57+
f"and max zoom {lc.maxzoom} for layer {layer}."), err=True)
58+
return 1
59+
click.echo(sql)
60+
return 0

0 commit comments

Comments
 (0)