def read(self, layer, coord, format): body = Disk.read(self, layer, coord, format) self.signal_land_or_sea(body, layer, coord, format) # we should never get here return body
def __init__(self, empty_size=334, **kwargs): """ Initialize the SparseCache 334 is the file size of a 256x256 transparent PNG """ # TODO support multiple sizes self.empty_size = empty_size return Disk.__init__(self, **kwargs)
def __init__(self, demdir, tiledir, tmpdir, source): """ """ cache = Disk(tiledir, dirs='safe') config = Configuration(cache, '.') Layer.__init__(self, config, SphericalMercator(), Metatile()) self.provider = Provider(self, demdir, tmpdir, source)
def read(self, layer, coord, format): """ Read a cached tile. """ fullpath = self._fullpath(layer, coord, format) if not exists(fullpath): return None if os.stat(fullpath).st_size == self.empty_size: raise TheTileLeftANote(status_code=404, emit_content_type=False) return Disk.read(self, layer, coord, format)
def signal_land_or_sea(self, body, layer, coord, format): if body: md5sum = self.md5sum(body) second_md5sum = self.md5sum(Disk.read(self, self.second, coord, format)) headers = Headers([('Access-Control-Expose-Headers', 'X-Land-Or-Sea')]) headers.setdefault('X-Land-Or-Sea', '0') if second_md5sum and md5sum == second_md5sum: if md5sum == self.land_md5: headers['X-Land-Or-Sea'] = '1' elif md5sum == self.sea_md5: headers['X-Land-Or-Sea'] = '2' raise TheTileLeftANote(content=body, headers=headers)
def save(self, body, layer, coord, format): Disk.save(self, body, layer, coord, format) self.signal_land_or_sea(body, layer, coord, format)
def __init__(self, land='', sea='', second=None, **kwargs): self.land_md5 = land self.sea_md5 = sea self.second = LayerStub(second) return Disk.__init__(self, **kwargs)
layer = config.layers[options.layer] layer.write_cache = True # Override to make seeding guaranteed useful. verbose = options.verbose extension = options.extension enable_retries = options.enable_retries progressfile = options.progressfile src_mbtiles = options.mbtiles_input if src_mbtiles: layer.provider = MBTiles.Provider(layer, src_mbtiles) n, t, v, d, format, b = MBTiles.tileset_info(src_mbtiles) extension = format or extension if options.outputdirectory and options.mbtiles_output: cache1 = Disk(options.outputdirectory, dirs='portable', gzip=[]) cache2 = MBTiles.Cache(options.mbtiles_output, extension, options.layer) config.cache = Multi([cache1, cache2]) elif options.outputdirectory: config.cache = Disk(options.outputdirectory, dirs='portable', gzip=[]) elif options.mbtiles_output: config.cache = MBTiles.Cache(options.mbtiles_output, extension, options.layer) lat1, lon1, lat2, lon2 = options.bbox south, west = min(lat1, lat2), min(lon1, lon2)
"dirs": "portable", "gzip": ["xml", "json"] } } """ import os import hashlib from os.path import join as pathjoin from TileStache.Caches import Disk class Cache (Disk): def __init__(self, path, umask=0022, dirs='safe', gzip='txt text json xml'.split(), pattern='**/**'): Disk.__init__(self, path, umask, dirs, gzip) self.pattern = pattern def _fullpath(self, layer, coord, format): """ """ filepath = self._filepath(layer, coord, format) l = layer.name() md5_layer = hashlib.md5(l).hexdigest(); pattern_list = self.pattern.split('/') folder_list = [] index = 0 for i in range(0, len(pattern_list)): folder_length = len(pattern_list[i])