コード例 #1
0
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))])
コード例 #2
0
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))])
コード例 #3
0
ファイル: test_metatile.py プロジェクト: Bobfrat/tilecloud
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))])
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
ファイル: __init__.py プロジェクト: ochriste/tilecloud-chain
    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)
コード例 #7
0
 def setUp(self):
     self.mtsts = MetaTileSplitterTileStore("image/png",
                                            tile_size=2,
                                            border=2)
コード例 #8
0
ファイル: test_metatile.py プロジェクト: Bobfrat/tilecloud
 def setUp(self):
     self.mtsts = MetaTileSplitterTileStore('image/png', tile_size=2, border=2)
コード例 #9
0
 def setUp(self):
     self.mtsts = MetaTileSplitterTileStore('image/png', tile_size=2)
コード例 #10
0
ファイル: test_metatile.py プロジェクト: camptocamp/tilecloud
 def setUp(self) -> None:
     self.mtsts = MetaTileSplitterTileStore("image/png", tile_size=2)
コード例 #11
0
ファイル: test_metatile.py プロジェクト: gijs/tilecloud
 def setUp(self):
     self.mtsts = MetaTileSplitterTileStore("PNG", tile_size=2, border=2)