Skip to content

Commit c410aa5

Browse files
authored
Merge pull request #364 from tilezen/zerebubuth/add-logger-to-context
Add log function to post-process Context
2 parents 146dfbe + 9ab976f commit c410aa5

2 files changed

Lines changed: 42 additions & 9 deletions

File tree

tilequeue/command.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2151,10 +2151,15 @@ def tilequeue_meta_tile(cfg, args):
21512151
parent, job_coord, coord)
21522152
continue
21532153

2154+
def log_fn(data):
2155+
meta_tile_logger._log(
2156+
data, parent, pyramid=job_coord, coord=coord)
2157+
21542158
processor = Processor(
21552159
coord, cfg.metatile_zoom, fetch, layer_data,
21562160
post_process_data, formats, cfg.buffer_cfg,
2157-
output_calc_mapping, cfg.max_zoom, cfg.tile_sizes)
2161+
output_calc_mapping, cfg.max_zoom, cfg.tile_sizes,
2162+
log_fn=log_fn)
21582163

21592164
try:
21602165
processor.fetch()
@@ -2272,10 +2277,14 @@ def tilequeue_meta_tile_low_zoom(cfg, args):
22722277
fetch, coord_datum = fetched_coord_data[0]
22732278
coord = coord_datum['coord']
22742279

2280+
def log_fn(data):
2281+
meta_low_zoom_logger._log(data, parent, coord)
2282+
22752283
processor = Processor(
22762284
coord, cfg.metatile_zoom, fetch, layer_data,
22772285
post_process_data, formats, cfg.buffer_cfg,
2278-
output_calc_mapping, cfg.max_zoom, cfg.tile_sizes)
2286+
output_calc_mapping, cfg.max_zoom, cfg.tile_sizes,
2287+
log_fn=log_fn)
22792288

22802289
try:
22812290
processor.fetch()

tilequeue/process.py

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from shapely.wkb import loads
99
from sys import getsizeof
1010
from tilequeue.config import create_query_bounds_pad_fn
11+
from tilequeue.log import make_coord_dict
1112
from tilequeue.tile import calc_meters_per_pixel_dim
1213
from tilequeue.tile import coord_to_mercator_bounds
1314
from tilequeue.tile import normalize_geometry_type
@@ -59,6 +60,10 @@ def _sizeof(val):
5960
'unpadded_bounds', # the latlon bounds of the tile
6061
'params', # user configuration parameters
6162
'resources', # resources declared in config
63+
64+
# callable to log out a JSON object. the single parameter should be plain
65+
# data structures (list, dict, etc...)
66+
'log',
6267
])
6368

6469

@@ -68,17 +73,26 @@ def _sizeof(val):
6873
# of other layers (e.g: projecting attributes, deleting hidden
6974
# features, etc...)
7075
def _postprocess_data(
71-
feature_layers, post_process_data, nominal_zoom, unpadded_bounds):
76+
feature_layers, post_process_data, nominal_zoom, unpadded_bounds,
77+
log_fn=None):
7278

7379
for step in post_process_data:
7480
fn = resolve(step['fn_name'])
7581

82+
# if no logger is configured, just drop the output. but we don't want
83+
# to pass the complexity on to the inner functions - more readable and
84+
# less prone to bugs if we just have a single check here.
85+
def _log_fn(data):
86+
if log_fn:
87+
log_fn(dict(fn_name=step['fn_name'], msg=data))
88+
7689
ctx = Context(
7790
feature_layers=feature_layers,
7891
nominal_zoom=nominal_zoom,
7992
unpadded_bounds=unpadded_bounds,
8093
params=step['params'],
8194
resources=step['resources'],
95+
log=_log_fn,
8296
)
8397

8498
layer = fn(ctx)
@@ -262,7 +276,7 @@ def meta_for_properties(query_props):
262276

263277
def process_coord_no_format(
264278
feature_layers, nominal_zoom, unpadded_bounds, post_process_data,
265-
output_calc_mapping):
279+
output_calc_mapping, log_fn=None):
266280

267281
extra_data = dict(size={})
268282
processed_feature_layers = []
@@ -395,7 +409,7 @@ def process_coord_no_format(
395409
# post-process data here, before it gets formatted
396410
processed_feature_layers = _postprocess_data(
397411
processed_feature_layers, post_process_data, nominal_zoom,
398-
unpadded_bounds)
412+
unpadded_bounds, log_fn)
399413

400414
return processed_feature_layers, extra_data
401415

@@ -492,10 +506,10 @@ def format_coord(
492506
# the output.
493507
def process_coord(coord, nominal_zoom, feature_layers, post_process_data,
494508
formats, unpadded_bounds, cut_coords, buffer_cfg,
495-
output_calc_spec, scale=4096):
509+
output_calc_spec, scale=4096, log_fn=None):
496510
processed_feature_layers, extra_data = process_coord_no_format(
497511
feature_layers, nominal_zoom, unpadded_bounds, post_process_data,
498-
output_calc_spec)
512+
output_calc_spec, log_fn=log_fn)
499513

500514
all_formatted_tiles, extra_data = format_coord(
501515
coord, nominal_zoom, processed_feature_layers, formats,
@@ -721,7 +735,7 @@ def calculate_cut_coords_by_zoom(
721735
class Processor(object):
722736
def __init__(self, coord, metatile_zoom, fetch_fn, layer_data,
723737
post_process_data, formats, buffer_cfg, output_calc_mapping,
724-
max_zoom, cfg_tile_sizes):
738+
max_zoom, cfg_tile_sizes, log_fn=None):
725739
self.coord = coord
726740
self.metatile_zoom = metatile_zoom
727741
self.fetch_fn = fetch_fn
@@ -732,6 +746,7 @@ def __init__(self, coord, metatile_zoom, fetch_fn, layer_data,
732746
self.output_calc_mapping = output_calc_mapping
733747
self.max_zoom = max_zoom
734748
self.cfg_tile_sizes = cfg_tile_sizes
749+
self.log_fn = None
735750

736751
def fetch(self):
737752
unpadded_bounds = coord_to_mercator_bounds(self.coord)
@@ -756,11 +771,20 @@ def process_tiles(self):
756771
all_extra_data = {}
757772

758773
for nominal_zoom, cut_coords in self.cut_coords_by_zoom.items():
774+
def log_fn(data):
775+
if self.log_fn:
776+
self.log_fn(dict(
777+
coord=make_coord_dict(self.coord),
778+
nominal_zoom=nominal_zoom,
779+
msg=data,
780+
))
781+
759782
feature_layers = self.feature_layers_by_zoom[nominal_zoom]
760783
formatted_tiles, extra_data = process_coord(
761784
self.coord, nominal_zoom, feature_layers,
762785
self.post_process_data, self.formats, unpadded_bounds,
763-
cut_coords, self.buffer_cfg, self.output_calc_mapping
786+
cut_coords, self.buffer_cfg, self.output_calc_mapping,
787+
log_fn=log_fn,
764788
)
765789
all_formatted_tiles.extend(formatted_tiles)
766790
all_extra_data.update(extra_data)

0 commit comments

Comments
 (0)