88from shapely .wkb import loads
99from sys import getsizeof
1010from tilequeue .config import create_query_bounds_pad_fn
11+ from tilequeue .log import make_coord_dict
1112from tilequeue .tile import calc_meters_per_pixel_dim
1213from tilequeue .tile import coord_to_mercator_bounds
1314from 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...)
7075def _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
263277def 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.
493507def 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(
721735class 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