def test_scaled_tiles(self, name, file_cache, tile_locker, rescale_tiles, tiles, store, expected_load, output): res = [ 1.40625, # 0 0.703125, # 1 0.3515625, # 2 0.17578125, # 3 0.087890625, # 4 0.0439453125, # 5 0.02197265625, # 6 0.010986328125, # 7 0.007, # 8 additional resolution to test unregular grids 0.0054931640625, # 9 0.00274658203125, # 10 ] grid = TileGrid(SRS(4326), origin='sw', bbox=[-180, -90, 180, 90], res=res) image_opts = ImageOptions(format='image/png', resampling='nearest') tm = TileManager( grid, file_cache, [], 'png', locker=tile_locker, image_opts=image_opts, rescale_tiles=rescale_tiles, ) if store: colors = set() if output == "partial": colors.add((255, 255, 255)) for i, t in enumerate(store): color = (150+i*35, 5+i*35, 5+i*35) colors.add(color) tile = Tile(t, ImageSource(create_tmp_image_buf((256, 256), color=color))) file_cache.store_tile(tile) loaded_tiles = tm.load_tile_coords(tiles) assert not is_blank(loaded_tiles) assert len(loaded_tiles) == len(tiles) got_colors = set() for t in loaded_tiles: got_colors.update([c for _, c in t.source.as_image().getcolors()]) assert got_colors == colors else: loaded_tiles = tm.load_tile_coords(tiles) assert is_blank(loaded_tiles) == (output == "blank") assert len(loaded_tiles.tiles) == len(tiles) assert file_cache.stored_tiles == set(store) assert file_cache.loaded_tiles == counting_set(expected_load)
class TestTileManagerWMSSource(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png', lock_dir=tmp_lock_dir) self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.client = MockWMSClient() self.source = WMSSource(self.client) self.image_opts = ImageOptions(format='image/png') self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source], 'png', meta_size=[2, 2], meta_buffer=0, image_opts=self.image_opts, locker=self.locker, ) def test_same_lock_for_meta_tile(self): eq_(self.tile_mgr.lock(Tile((0, 0, 1))).lock_file, self.tile_mgr.lock(Tile((1, 0, 1))).lock_file ) def test_locks_for_meta_tiles(self): assert_not_equal(self.tile_mgr.lock(Tile((0, 0, 2))).lock_file, self.tile_mgr.lock(Tile((2, 0, 2))).lock_file ) def test_create_tile_first_level(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1)), Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(self.client.requested, [((-180.0, -90.0, 180.0, 90.0), (512, 256), SRS(4326))]) def test_create_tile(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 2))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 0.0, 90.0), (512, 512), SRS(4326))]) def test_create_tiles(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 2)), Tile((2, 0, 2))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2), (2, 0, 2), (3, 0, 2), (2, 1, 2), (3, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 0.0, 90.0), (512, 512), SRS(4326)), ((0.0, -90.0, 180.0, 90.0), (512, 512), SRS(4326))]) def test_load_tile_coords(self): tiles = self.tile_mgr.load_tile_coords(((0, 0, 2), (2, 0, 2))) eq_(tiles[0].coord, (0, 0, 2)) assert isinstance(tiles[0].source, ImageSource) eq_(tiles[1].coord, (2, 0, 2)) assert isinstance(tiles[1].source, ImageSource) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2), (2, 0, 2), (3, 0, 2), (2, 1, 2), (3, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 0.0, 90.0), (512, 512), SRS(4326)), ((0.0, -90.0, 180.0, 90.0), (512, 512), SRS(4326))])
class TestTileManagerWMSSource(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png') self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.client = MockWMSClient() self.source = WMSSource(self.client) self.image_opts = ImageOptions(format='image/png') self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source], 'png', meta_size=[2, 2], meta_buffer=0, image_opts=self.image_opts, locker=self.locker, ) def test_same_lock_for_meta_tile(self): eq_(self.tile_mgr.lock(Tile((0, 0, 1))).lock_file, self.tile_mgr.lock(Tile((1, 0, 1))).lock_file ) def test_locks_for_meta_tiles(self): assert_not_equal(self.tile_mgr.lock(Tile((0, 0, 2))).lock_file, self.tile_mgr.lock(Tile((2, 0, 2))).lock_file ) def test_create_tile_first_level(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1)), Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(self.client.requested, [((-180.0, -90.0, 180.0, 90.0), (512, 256), SRS(4326))]) def test_create_tile(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 2))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 0.0, 90.0), (512, 512), SRS(4326))]) def test_create_tiles(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 2)), Tile((2, 0, 2))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2), (2, 0, 2), (3, 0, 2), (2, 1, 2), (3, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 0.0, 90.0), (512, 512), SRS(4326)), ((0.0, -90.0, 180.0, 90.0), (512, 512), SRS(4326))]) def test_load_tile_coords(self): tiles = self.tile_mgr.load_tile_coords(((0, 0, 2), (2, 0, 2))) eq_(tiles[0].coord, (0, 0, 2)) assert isinstance(tiles[0].source, ImageSource) eq_(tiles[1].coord, (2, 0, 2)) assert isinstance(tiles[1].source, ImageSource) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2), (2, 0, 2), (3, 0, 2), (2, 1, 2), (3, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 0.0, 90.0), (512, 512), SRS(4326)), ((0.0, -90.0, 180.0, 90.0), (512, 512), SRS(4326))])
def test_upscale(self, mock_file_cache, tile_locker): grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) image_opts = ImageOptions(format='image/png') tm = TileManager( grid, mock_file_cache, [], 'png', locker=tile_locker, image_opts=image_opts, ) assert is_blank(tm.load_tile_coords([(0, 0, 0)])) assert is_blank(tm.load_tile_coords([(3, 2, 5)])) assert mock_file_cache.stored_tiles == set() assert mock_file_cache.loaded_tiles == counting_set([(0, 0, 0), (3, 2, 5)])