Пример #1
0
    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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
    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)
Пример #8
0
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),
    )