def _copy( self, options: Namespace, gene: TileGeneration, layer_name: str, source: str, dest: str, task_name: str, ) -> None: # disable metatiles assert gene.config_file config = gene.get_config(gene.config_file) layer = config.config["layers"][layer_name] cast(tilecloud_chain.configuration.LayerWms, layer)["meta"] = False count_tiles_dropped = Count() gene.create_log_tiles_error(layer_name) source_tilestore = gene.get_tilesstore(source) dest_tilestore = gene.get_tilesstore(dest) gene.init_tilecoords(config, layer_name) gene.add_geom_filter() gene.add_logger() gene.get(source_tilestore, "Get the tiles") gene.imap(DropEmpty(gene)) # Discard tiles with certain content if "empty_tile_detection" in layer: empty_tile = layer["empty_tile_detection"] gene.imap( HashDropper(empty_tile["size"], empty_tile["hash"], store=dest_tilestore, count=count_tiles_dropped)) if options.process: gene.process(options.process) gene.imap(DropEmpty(gene)) self.count = gene.counter_size() gene.put(dest_tilestore, "Store the tiles") gene.consume() if not options.quiet: print(f"""The tile {task_name} of layer '{layer_name}' is finish Nb {task_name} tiles: {self.count.nb} Nb errored tiles: {gene.error} Nb dropped tiles: {count_tiles_dropped.nb} Total time: {duration_format(gene.duration)} Total size: {size_format(self.count.size)} Time per tile: {(gene.duration / self.count.nb * 1000).seconds if self.count.nb != 0 else 0} ms Size per tile: {self.count.size / self.count.nb if self.count.nb != 0 else -1} o """)