def test_folder(self): c = Disk('foo', '/tmp/') self.assertEqual(c.folder, '/tmp/foo') c.basename = 'bar' self.assertEqual(c.folder, '/tmp/bar')
def __init__(self, **kwargs): """ Manipulates tiles in general. Gives ability to list required tiles on a bounding box, download them, render them, extract them from other mbtiles... Keyword arguments: cache -- use a local cache to share tiles between runs (default True) tiles_dir -- Local folder containing existing tiles if cache is True, or where temporary tiles will be written otherwise (default DEFAULT_TMP_DIR) tiles_url -- remote URL to download tiles (*default DEFAULT_TILES_URL*) tiles_headers -- HTTP headers to send (*default empty*) stylefile -- mapnik stylesheet file (*to render tiles locally*) mbtiles_file -- A MBTiles file providing tiles (*to extract its tiles*) wms_server -- A WMS server url (*to request tiles*) wms_layers -- The list of layers to be requested wms_options -- WMS parameters to be requested (see ``landez.reader.WMSReader``) tile_size -- default tile size (default DEFAULT_TILE_SIZE) tile_format -- default tile format (default DEFAULT_TILE_FORMAT) """ self.tile_size = kwargs.get('tile_size', DEFAULT_TILE_SIZE) self.tile_format = kwargs.get('tile_format', DEFAULT_TILE_FORMAT) # Tiles Download self.tiles_url = kwargs.get('tiles_url', DEFAULT_TILES_URL) self.tiles_subdomains = kwargs.get('tiles_subdomains', DEFAULT_TILES_SUBDOMAINS) self.tiles_headers = kwargs.get('tiles_headers') # Tiles rendering self.stylefile = kwargs.get('stylefile') # Grids rendering self.grid_fields = kwargs.get('grid_fields', []) self.grid_layer = kwargs.get('grid_layer', 0) # MBTiles reading self.mbtiles_file = kwargs.get('mbtiles_file') # WMS requesting self.wms_server = kwargs.get('wms_server') self.wms_layers = kwargs.get('wms_layers', []) self.wms_options = kwargs.get('wms_options', {}) if self.mbtiles_file: self.reader = MBTilesReader(self.mbtiles_file, self.tile_size) elif self.wms_server: assert self.wms_layers, _("Requires at least one layer (see ``wms_layers`` parameter)") self.reader = WMSReader(self.wms_server, self.wms_layers, self.tiles_headers, self.tile_size, **self.wms_options) if 'format' in self.wms_options: self.tile_format = self.wms_options['format'] logger.info(_("Tile format set to %s") % self.tile_format) elif self.stylefile: self.reader = MapnikRenderer(self.stylefile, self.tile_size) else: mimetype, encoding = mimetypes.guess_type(self.tiles_url) if mimetype and mimetype != self.tile_format: self.tile_format = mimetype logger.info(_("Tile format set to %s") % self.tile_format) self.reader = TileDownloader(self.tiles_url, headers=self.tiles_headers, subdomains=self.tiles_subdomains, tilesize=self.tile_size) # Tile files extensions self._tile_extension = mimetypes.guess_extension(self.tile_format, strict=False) assert self._tile_extension, _("Unknown format %s") % self.tile_format if self._tile_extension == '.jpe': self._tile_extension = '.jpeg' # Cache tiles_dir = kwargs.get('tiles_dir', DEFAULT_TMP_DIR) if kwargs.get('cache', True): self.cache = Disk(self.reader.basename, tiles_dir, extension=self._tile_extension) if kwargs.get('cache_scheme'): self.cache.scheme = kwargs.get('cache_scheme') else: self.cache = Dummy(extension=self._tile_extension) # Overlays self._layers = [] # Filters self._filters = [] # Number of tiles rendered/downloaded here self.rendered = 0