Example #1
0
    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
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    def save(self, body, layer, coord, format):
        Disk.save(self, body, layer, coord, format)

        self.signal_land_or_sea(body, layer, coord, format)
Example #7
0
    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)
Example #8
0
        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)
Example #9
0
            "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])