Skip to content

Commit 12827a8

Browse files
committed
Don't create new directories for dynamic maps, never remove tiles after fetch
1 parent a7c6522 commit 12827a8

File tree

3 files changed

+18
-56
lines changed

3 files changed

+18
-56
lines changed

xarray_leaflet/handler.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,15 @@ def set_default_headers(self):
1414

1515
@tornado.web.authenticated
1616
async def get(self, path):
17-
path_done = path[:-4] + ".done"
18-
delete = False
17+
status = path[:-4] + ".status"
1918
timeout = False
2019
dt = 0.1
2120
t = 0
2221
while True:
23-
if os.path.exists(path_done):
24-
with open(path_done) as f:
22+
if os.path.exists(status):
23+
with open(status) as f:
2524
txt = f.read()
26-
if txt.startswith("keep"):
27-
break
28-
elif txt.startswith("delete"):
29-
delete = True
25+
if txt.startswith("done"):
3026
break
3127
await sleep(dt)
3228
t += dt
@@ -50,7 +46,6 @@ async def get(self, path):
5046
self.set_header(
5147
"Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"
5248
)
49+
self.set_header("Pragma", "no-cache")
50+
self.set_header("Expires", "0")
5351
self.finish(tile_png)
54-
if delete:
55-
os.remove(path_done)
56-
os.remove(path)

xarray_leaflet/utils.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,18 @@ def reproject_not_custom(
3939
return destination
4040

4141

42-
def write_image(path, data, persist):
42+
def write_image(path, data):
4343
os.makedirs(os.path.dirname(path), exist_ok=True)
44+
status_path = path[:-4] + ".status"
45+
with open(status_path, "wt") as f:
46+
f.write("computing")
4447
if data is None:
4548
open(path, "wb").close()
4649
else:
4750
im = Image.fromarray(np.uint8(data))
4851
im.save(path)
49-
write_done_file(path, persist)
50-
51-
52-
def write_done_file(png_path, persist):
53-
with open(png_path[:-4] + ".done", "wt") as f:
54-
if persist:
55-
f.write("keep")
56-
else:
57-
f.write("delete")
52+
with open(status_path, "wt") as f:
53+
f.write("done")
5854

5955

6056
def get_bbox_tiles(tiles):

xarray_leaflet/xarray_leaflet.py

Lines changed: 6 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ def _start(self):
327327
if not self.dynamic:
328328
if not self.is_vector:
329329
self._show_colorbar(self._da_notransform)
330-
self.m.add_layer(self.layer)
330+
self.m.add_layer(self.layer)
331331

332332
def _show_colorbar(self, da):
333333
if self.colorbar_position and self.colormap is not None:
@@ -356,15 +356,6 @@ def _show_colorbar(self, da):
356356

357357
def _get_vector_tiles(self, change=None):
358358
self.m.add_control(self.spinner_control)
359-
if self.dynamic:
360-
self.tile_temp_dir.cleanup()
361-
self.tile_temp_dir = tempfile.TemporaryDirectory(prefix="xarray_leaflet_")
362-
new_tile_path = self.tile_temp_dir.name
363-
new_url = (
364-
self.base_url + "/xarray_leaflet/" + new_tile_path + "/{z}/{x}/{y}.png"
365-
)
366-
if self.layer in self.m.layers:
367-
self.m.remove_layer(self.layer)
368359

369360
# visible bounds
370361
(south, west), (north, east) = self.m.bounds
@@ -385,9 +376,6 @@ def _get_vector_tiles(self, change=None):
385376
else:
386377
self.max_value = da_visible.max()
387378

388-
self.tile_path = new_tile_path
389-
self.url = new_url
390-
391379
for tile in tiles:
392380
x, y, z = tile
393381
path = f"{self.tile_path}/{z}/{x}/{y}.png"
@@ -402,29 +390,18 @@ def _get_vector_tiles(self, change=None):
402390
else:
403391
da_tile = None
404392
if da_tile is None:
405-
write_image(path, None, self.persist)
393+
write_image(path, None)
406394
else:
407395
da_tile /= self.max_value
408396
da_tile = self.colormap(da_tile)
409-
write_image(path, da_tile * 255, self.persist)
397+
write_image(path, da_tile * 255)
410398

411399
if self.dynamic:
412-
self.layer.path = self.url
413-
self.m.add_layer(self.layer)
414400
self.layer.redraw()
415401
self.m.remove_control(self.spinner_control)
416402

417403
def _get_raster_tiles(self, change=None):
418404
self.m.add_control(self.spinner_control)
419-
if self.dynamic:
420-
self.tile_temp_dir.cleanup()
421-
self.tile_temp_dir = tempfile.TemporaryDirectory(prefix="xarray_leaflet_")
422-
new_tile_path = self.tile_temp_dir.name
423-
new_url = (
424-
self.base_url + "/xarray_leaflet/" + new_tile_path + "/{z}/{x}/{y}.png"
425-
)
426-
if self.layer in self.m.layers:
427-
self.m.remove_layer(self.layer)
428405

429406
(left, top), (right, bottom) = self.m.pixel_bounds
430407
(south, west), (north, east) = self.m.bounds
@@ -466,10 +443,6 @@ def _get_raster_tiles(self, change=None):
466443
self.transform1(da_visible, *self.transform0_args)
467444
)
468445

469-
if self.dynamic:
470-
self.tile_path = new_tile_path
471-
self.url = new_url
472-
473446
for tile in tiles:
474447
x, y, z = tile
475448
path = f"{self.tile_path}/{z}/{x}/{y}.png"
@@ -490,7 +463,7 @@ def _get_raster_tiles(self, change=None):
490463
da_tile = da_visible
491464
# check if we have data for this tile
492465
if 0 in da_tile.shape:
493-
write_image(path, None, self.persist)
466+
write_image(path, None)
494467
else:
495468
da_tile.attrs = self.attrs
496469
da_tile, transform2_args = get_transform(
@@ -541,19 +514,17 @@ def _get_raster_tiles(self, change=None):
541514
alpha = np.where(das[0] == self._da.rio.nodata, 0, 255)
542515
das.append(alpha)
543516
da_tile = np.stack(das, axis=2)
544-
write_image(path, da_tile, self.persist)
517+
write_image(path, da_tile)
545518
else:
546519
da_tile = self.colormap(das[0])
547-
write_image(path, da_tile * 255, self.persist)
520+
write_image(path, da_tile * 255)
548521

549522
if self.dynamic:
550523
if self.colorbar in self.m.controls:
551524
self.m.remove_control(self.colorbar)
552525
self._show_colorbar(
553526
self._da_notransform.sel(y=slice(north, south), x=slice(west, east))
554527
)
555-
self.layer.path = self.url
556-
self.m.add_layer(self.layer)
557528
self.layer.redraw()
558529

559530
self.m.remove_control(self.spinner_control)

0 commit comments

Comments
 (0)