def setup(self): if not os.environ.get('MAPPROXY_TEST_COUCHDB'): raise SkipTest() couch_address = os.environ['MAPPROXY_TEST_COUCHDB'] db_name = 'mapproxy_test_%d' % random.randint(0, 100000) TileCacheTestBase.setup(self) md_template = CouchDBMDTemplate({'row': '{{y}}', 'tile_column': '{{x}}', 'zoom': '{{level}}', 'time': '{{timestamp}}', 'coord': '{{wgs_tile_centroid}}'}) self.cache = CouchDBCache(couch_address, db_name, file_ext='png', tile_grid=tile_grid(3857, name='global-webmarcator'), md_template=md_template)
def create_couchdb_export_cache(export_path, db_name, file_ext, couchdb_port, app_state): md_template = CouchDBMDTemplate({}) cache_dir = app_state.user_temp_dir() url = 'http://%s:%s' % ('127.0.0.1', couchdb_port) return CouchDBCache(url=url, db_name=db_name, md_template=md_template, lock_dir=cache_dir, file_ext=file_ext, tile_grid=DEFAULT_GRID)
def create_couchdb_cache(app_state, task=False, layer=False): cache_dir = app_state.user_temp_dir() if task: db_name = task.layer.name file_ext = task.source.format if layer: gbi_server = layer.gbi_server if gbi_server is not None: gbi_server.app_state = app_state db_name = gbi_server.raster_prefix + layer.name else: db_name = "%s_%s_%s" % (layer.prefix, app_state.config.get( 'app', 'raster_prefix'), layer.name) file_ext = layer.format port = app_state.config.get('couchdb', 'port') url = 'http://127.0.0.1:%s' % (port, ) md_template = CouchDBMDTemplate({}) return CouchDBCache(url=url, db_name=db_name, md_template=md_template, lock_dir=cache_dir, file_ext=file_ext, tile_grid=DEFAULT_GRID)
class TestCouchDBCache(TileCacheTestBase): always_loads_metadata = True def setup(self): if not os.environ.get('MAPPROXY_TEST_COUCHDB'): raise SkipTest() couch_address = os.environ['MAPPROXY_TEST_COUCHDB'] db_name = 'mapproxy_test_%d' % random.randint(0, 100000) TileCacheTestBase.setup(self) md_template = CouchDBMDTemplate({'row': '{{y}}', 'tile_column': '{{x}}', 'zoom': '{{level}}', 'time': '{{timestamp}}', 'coord': '{{wgs_tile_centroid}}'}) self.cache = CouchDBCache(couch_address, db_name, lock_dir=self.cache_dir, file_ext='png', tile_grid=tile_grid(3857, name='global-webmarcator'), md_template=md_template) def teardown(self): import requests requests.delete(self.cache.couch_url) TileCacheTestBase.teardown(self) def test_store_bulk_with_overwrite(self): tile = self.create_tile((0, 0, 4)) self.create_cached_tile(tile) assert self.cache.is_cached(Tile((0, 0, 4))) loaded_tile = Tile((0, 0, 4)) assert self.cache.load_tile(loaded_tile) assert loaded_tile.source_buffer().read() == tile.source_buffer().read() assert not self.cache.is_cached(Tile((1, 0, 4))) tiles = [self.create_another_tile((x, 0, 4)) for x in range(2)] assert self.cache.store_tiles(tiles) assert self.cache.is_cached(Tile((0, 0, 4))) loaded_tile = Tile((0, 0, 4)) assert self.cache.load_tile(loaded_tile) # check that tile is overwritten assert loaded_tile.source_buffer().read() != tile.source_buffer().read() assert loaded_tile.source_buffer().read() == tiles[0].source_buffer().read() def test_double_remove(self): tile = self.create_tile() self.create_cached_tile(tile) assert self.cache.remove_tile(tile) assert self.cache.remove_tile(tile) def test_lock(self): with self.cache.lock(Tile((0, 0, 0))): lockfile = glob.glob(os.path.join(self.cache_dir, 'couchdb-*-0-0-0.lck'))[0] assert re.match('.*/couchdb-[0-9a-f]+-0-0-0.lck$', lockfile)
class TestCouchDBCache(TileCacheTestBase): always_loads_metadata = True def setup(self): couch_address = os.environ['MAPPROXY_TEST_COUCHDB'] db_name = 'mapproxy_test_%d' % random.randint(0, 100000) TileCacheTestBase.setup(self) md_template = CouchDBMDTemplate({ 'row': '{{y}}', 'tile_column': '{{x}}', 'zoom': '{{level}}', 'time': '{{timestamp}}', 'coord': '{{wgs_tile_centroid}}' }) self.cache = CouchDBCache(couch_address, db_name, file_ext='png', tile_grid=tile_grid( 3857, name='global-webmarcator'), md_template=md_template) def teardown(self): import requests requests.delete(self.cache.couch_url) TileCacheTestBase.teardown(self) def test_store_bulk_with_overwrite(self): tile = self.create_tile((0, 0, 4)) self.create_cached_tile(tile) assert self.cache.is_cached(Tile((0, 0, 4))) loaded_tile = Tile((0, 0, 4)) assert self.cache.load_tile(loaded_tile) assert loaded_tile.source_buffer().read() == tile.source_buffer().read( ) assert not self.cache.is_cached(Tile((1, 0, 4))) tiles = [self.create_another_tile((x, 0, 4)) for x in range(2)] assert self.cache.store_tiles(tiles) assert self.cache.is_cached(Tile((0, 0, 4))) loaded_tile = Tile((0, 0, 4)) assert self.cache.load_tile(loaded_tile) # check that tile is overwritten assert loaded_tile.source_buffer().read() != tile.source_buffer().read( ) assert loaded_tile.source_buffer().read() == tiles[0].source_buffer( ).read() def test_double_remove(self): tile = self.create_tile() self.create_cached_tile(tile) assert self.cache.remove_tile(tile) assert self.cache.remove_tile(tile)
def create_couchdb_cache(wmts_source, app_state): cache_dir = app_state.user_temp_dir() db_name = wmts_source.name file_ext = wmts_source.format port = app_state.config.get('couchdb', 'port') url = 'http://127.0.0.1:%s' % (port, ) md_template = CouchDBMDTemplate({}) return CouchDBCache(url=url, db_name=db_name, md_template=md_template, lock_dir=cache_dir, file_ext=file_ext, tile_grid=DEFAULT_GRID)
def create_metadata_doc(couchdb, layer): metadata_url = couchdb.couch_url + '/metadata' md_doc = { 'title': layer.wmts_source.title, 'name': layer.name, 'type': 'tiles', 'source': { 'type': layer.wmts_source.source_type, 'url': layer.wmts_source.url, 'format': layer.wmts_source.format, 'srs': layer.wmts_source.srs, 'layers': layer.wmts_source.layer, }, 'levelMin': layer.wmts_source.download_level_start or layer.wmts_source.view_level_start, 'levelMax': layer.wmts_source.download_level_end or layer.wmts_source.view_level_end, } resp = requests.get(couchdb.couch_url) if resp.status_code == 404: requests.put(couchdb.couch_url) resp = requests.get(metadata_url) if resp.status_code == 200: rev = resp.json()['_rev'] md_doc['_rev'] = rev elif resp.status_code != 404: raise CouchDBCache.UnexpectedResponse( 'got unexpected resp (%d) from CouchDB: %s' % (resp.status_code, resp.content)) resp = requests.put( metadata_url, headers=[('Content-type', 'application/json')], data=json.dumps(md_doc), )