class TestMetaTileSplitterTileStoreWithBorder(unittest.TestCase): def setUp(self): self.mtsts = MetaTileSplitterTileStore('image/png', tile_size=2, border=2) def test_get(self): image = Image.new('RGBA', (8, 8)) image.paste((255, 0, 0, 0), (0, 0, 4, 4)) image.paste((0, 255, 0, 0), (0, 4, 4, 8)) image.paste((0, 0, 255, 0), (4, 0, 8, 4)) image.paste((0, 0, 0, 255), (4, 4, 8, 8)) string_io = StringIO() image.save(string_io, 'PNG') tile = Tile(TileCoord(1, 0, 0, 2), data=string_io.getvalue()) tiles = list(self.mtsts.get([tile])) self.assertEqual(len(tiles), 4) self.assertEqual(tiles[0].tilecoord, TileCoord(1, 0, 0)) image = Image.open(StringIO(tiles[0].data)) self.assertEqual(image.size, (2, 2)) self.assertEqual(image.getcolors(), [(4, (255, 0, 0, 0))]) self.assertEqual(tiles[1].tilecoord, TileCoord(1, 0, 1)) image = Image.open(StringIO(tiles[1].data)) self.assertEqual(image.size, (2, 2)) self.assertEqual(image.getcolors(), [(4, (0, 255, 0, 0))]) self.assertEqual(tiles[2].tilecoord, TileCoord(1, 1, 0)) image = Image.open(StringIO(tiles[2].data)) self.assertEqual(image.size, (2, 2)) self.assertEqual(image.getcolors(), [(4, (0, 0, 255, 0))]) self.assertEqual(tiles[3].tilecoord, TileCoord(1, 1, 1)) image = Image.open(StringIO(tiles[3].data)) self.assertEqual(image.size, (2, 2)) self.assertEqual(image.getcolors(), [(4, (0, 0, 0, 255))])
class TestMetaTileSplitterTileStore(unittest.TestCase): def setUp(self): self.mtsts = MetaTileSplitterTileStore("image/png", tile_size=2) def test_get(self): image = Image.new("RGBA", (4, 4)) image.paste((255, 0, 0, 0), (0, 0, 2, 2)) image.paste((0, 255, 0, 0), (0, 2, 2, 4)) image.paste((0, 0, 255, 0), (2, 0, 4, 2)) image.paste((0, 0, 0, 255), (2, 2, 4, 4)) string_io = BytesIO() image.save(string_io, "PNG") tile = Tile(TileCoord(1, 0, 0, 2), data=string_io.getvalue()) tiles = list(self.mtsts.get([tile])) self.assertEqual(len(tiles), 4) self.assertEqual(tiles[0].tilecoord, TileCoord(1, 0, 0)) image = Image.open(BytesIO(tiles[0].data)) self.assertEqual(image.size, (2, 2)) self.assertEqual(image.getcolors(), [(4, (255, 0, 0, 0))]) self.assertEqual(tiles[1].tilecoord, TileCoord(1, 0, 1)) image = Image.open(BytesIO(tiles[1].data)) self.assertEqual(image.size, (2, 2)) self.assertEqual(image.getcolors(), [(4, (0, 255, 0, 0))]) self.assertEqual(tiles[2].tilecoord, TileCoord(1, 1, 0)) image = Image.open(BytesIO(tiles[2].data)) self.assertEqual(image.size, (2, 2)) self.assertEqual(image.getcolors(), [(4, (0, 0, 255, 0))]) self.assertEqual(tiles[3].tilecoord, TileCoord(1, 1, 1)) image = Image.open(BytesIO(tiles[3].data)) self.assertEqual(image.size, (2, 2)) self.assertEqual(image.getcolors(), [(4, (0, 0, 0, 255))])
class TestMetaTileSplitterTileStore(unittest.TestCase): def setUp(self): self.mtsts = MetaTileSplitterTileStore('image/png', tile_size=2) def test_get(self): image = Image.new('RGBA', (4, 4)) image.paste((255, 0, 0, 0), (0, 0, 2, 2)) image.paste((0, 255, 0, 0), (0, 2, 2, 4)) image.paste((0, 0, 255, 0), (2, 0, 4, 2)) image.paste((0, 0, 0, 255), (2, 2, 4, 4)) string_io = StringIO() image.save(string_io, 'PNG') tile = Tile(TileCoord(1, 0, 0, 2), data=string_io.getvalue()) tiles = list(self.mtsts.get([tile])) self.assertEqual(len(tiles), 4) self.assertEqual(tiles[0].tilecoord, TileCoord(1, 0, 0)) image = Image.open(StringIO(tiles[0].data)) self.assertEqual(image.size, (2, 2)) self.assertEqual(image.getcolors(), [(4, (255, 0, 0, 0))]) self.assertEqual(tiles[1].tilecoord, TileCoord(1, 0, 1)) image = Image.open(StringIO(tiles[1].data)) self.assertEqual(image.size, (2, 2)) self.assertEqual(image.getcolors(), [(4, (0, 255, 0, 0))]) self.assertEqual(tiles[2].tilecoord, TileCoord(1, 1, 0)) image = Image.open(StringIO(tiles[2].data)) self.assertEqual(image.size, (2, 2)) self.assertEqual(image.getcolors(), [(4, (0, 0, 255, 0))]) self.assertEqual(tiles[3].tilecoord, TileCoord(1, 1, 1)) image = Image.open(StringIO(tiles[3].data)) self.assertEqual(image.size, (2, 2)) self.assertEqual(image.getcolors(), [(4, (0, 0, 0, 255))])
def add_metatile_splitter(self): assert self.tilestream is not None splitters = {} for lname, layer in self.layers.items(): if layer.get('meta'): splitters[lname] = MetaTileSplitterTileStore( layer['mime_type'], layer['grid_ref']['tile_size'], layer['meta_buffer']) store = TimedTileStoreWrapper(MultiTileStore(splitters), stats_name='splitter') if self.options.debug: def meta_get(tilestream): # pragma: no cover for metatile in tilestream: substream = store.get((metatile, )) for tile in substream: yield tile self.tilestream = meta_get(self.tilestream) # pragma: no cover else: def safe_get(tilestream): for metatile in tilestream: try: substream = store.get((metatile, )) for tile in substream: yield tile except GeneratorExit as e: raise e self.tilestream = safe_get(self.tilestream)
def add_metatile_splitter(self): class NullSplitter(TileStore): @staticmethod def get_one(tile): return tile splitters = {None: NullSplitter()} for lname, layer in self.layers.items(): if layer.get('meta'): splitters[lname] = MetaTileSplitterTileStore( layer['mime_type'], layer['grid_ref']['tile_size'], layer['meta_buffer']) store = MultiTileStore(splitters) if self.options.debug: def meta_get(tilestream): # pragma: no cover for metatile in tilestream: substream = store.get((metatile,)) for tile in substream: if tile is not metatile: tile.metatile = metatile tile.metadata = metatile.metadata if metatile.error: tile.error = metatile.error elif metatile.data is None: tile.error = "Metatile data is empty" yield tile self.tilestream = meta_get(self.tilestream) # pragma: no cover else: def safe_get(tilestream): for metatile in tilestream: try: substream = store.get((metatile,)) for tile in substream: if tile is not metatile: tile.metatile = metatile tile.metadata = metatile.metadata if metatile.error: tile.error = metatile.error elif metatile.data is None: tile.error = "Metatile data is empty" yield tile except GeneratorExit as e: raise e self.tilestream = safe_get(self.tilestream)
def add_metatile_splitter(self): store = MetaTileSplitterTileStore(self.layer['mime_type'], self.layer['grid_ref']['tile_size'], self.layer['meta_buffer']) if self.options.debug: def meta_get(tilestream): # pragma: no cover for metatile in tilestream: substream = store.get((metatile, )) for tile in substream: tile.metatile = metatile yield tile self.tilestream = meta_get(self.tilestream) # pragma: no cover else: def safe_get(tilestream): for metatile in tilestream: try: substream = store.get((metatile, )) for tile in substream: tile.metatile = metatile yield tile except GeneratorExit as e: raise e except: # pragma: no cover data = repr(metatile.data) if len(data) < 2000: metatile.error = str( sys.exc_info()[1]) + " - " + metatile.data else: class NoRepr: def __init__(self, value): self.value = value def __repr__(self): return self.value metatile.error = NoRepr( repr(str(sys.exc_info()[1])) + " - " + data[0:2000] + '...') yield metatile self.tilestream = safe_get(self.tilestream)
def setUp(self): self.mtsts = MetaTileSplitterTileStore("image/png", tile_size=2, border=2)
def setUp(self): self.mtsts = MetaTileSplitterTileStore('image/png', tile_size=2, border=2)
def setUp(self): self.mtsts = MetaTileSplitterTileStore('image/png', tile_size=2)
def setUp(self) -> None: self.mtsts = MetaTileSplitterTileStore("image/png", tile_size=2)
def setUp(self): self.mtsts = MetaTileSplitterTileStore("PNG", tile_size=2, border=2)