From b69df7b1a143a0baf8b16e9da710897be434bd26 Mon Sep 17 00:00:00 2001 From: Dominik Heidler Date: Mon, 19 Oct 2015 14:09:34 +0200 Subject: [PATCH] auto reload map --- ffmap/mapnik/dynmapnik.py | 18 ++++++++++++++++++ ffmap/mapnik/setup.py | 7 +++++++ ffmap/mapnik/tilestache.cfg | 23 ++++++++++------------- install.sh | 2 ++ 4 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 ffmap/mapnik/dynmapnik.py create mode 100644 ffmap/mapnik/setup.py diff --git a/ffmap/mapnik/dynmapnik.py b/ffmap/mapnik/dynmapnik.py new file mode 100644 index 0000000..3562e19 --- /dev/null +++ b/ffmap/mapnik/dynmapnik.py @@ -0,0 +1,18 @@ +#!/usr/bin/python2 + +import os +import logging +import TileStache + +class DynMapnik(TileStache.Providers.Mapnik): + def __init__(self, *args, **kwargs): + self.mapfile_mtime = 0 + TileStache.Providers.Mapnik.__init__(self, *args, **kwargs) + def renderArea(self, *args, **kwargs): + cur_mapfile_mtime = os.path.getmtime(self.mapfile) + if cur_mapfile_mtime > self.mapfile_mtime: + self.mapfile_mtime = cur_mapfile_mtime + if self.mapnik is not None: + self.mapnik = None + logging.info('TileStache.DynMapnik.ImageProvider.renderArea() detected mapfile change') + return TileStache.Providers.Mapnik.renderArea(self, *args, **kwargs) diff --git a/ffmap/mapnik/setup.py b/ffmap/mapnik/setup.py new file mode 100644 index 0000000..e078044 --- /dev/null +++ b/ffmap/mapnik/setup.py @@ -0,0 +1,7 @@ +#!/usr/bin/python2 + +from distutils.core import setup +setup(name='dynmapnik', + version='1.0', + py_modules=['dynmapnik'], +) diff --git a/ffmap/mapnik/tilestache.cfg b/ffmap/mapnik/tilestache.cfg index 79be010..e7dee56 100644 --- a/ffmap/mapnik/tilestache.cfg +++ b/ffmap/mapnik/tilestache.cfg @@ -6,27 +6,24 @@ "layers": { "tiles/links_and_routers": { "provider": { - "name": "mapnik", - "mapfile": "/usr/share/ffmap/links_and_routers.xml", - "layers": [ - [0, null], - [1, null] - ] + "class": "dynmapnik:DynMapnik", + "kwargs": { + "mapfile": "/usr/share/ffmap/links_and_routers.xml" + } }, "metatile": {"buffer": 128}, "cache lifespan": 300 }, "tiles/hoods": { "provider": { - "name": "mapnik", - "mapfile": "/usr/share/ffmap/hoods.xml", - "layers": [ - [0, null], - [1, null] - ] + "class": "dynmapnik:DynMapnik", + "kwargs": { + "mapfile": "/usr/share/ffmap/hoods.xml" + } }, "metatile": {"buffer": 128}, "cache lifespan": 300 } - } + }, + "logging": "info" } diff --git a/install.sh b/install.sh index 521879c..9186d4a 100755 --- a/install.sh +++ b/install.sh @@ -20,3 +20,5 @@ cp -v ffmap/systemd/*.service /etc/systemd/system/ systemctl daemon-reload python3 setup.py install --force + +(cd ffmap/mapnik; python2 setup.py install)