def _do_test(self, config):
        server.pyramid_server = None
        server.tilegeneration = None
        request = DummyRequest()
        request.registry.settings = {
            "tilegeneration_configfile": "tilegeneration/" + config,
        }
        request.params = {
            "Service": "WMTS",
            "Version": "1.0.0",
            "Request": "GetTile",
            "Format": "image/png",
            "Layer": "point",
            "Style": "default",
            "TileMatrixSet": "swissgrid_5",
            "TileMatrix": "4",
            "TileRow": "11",
            "TileCol": "14",
        }
        serve = PyramidView(request)
        serve()
        self.assertEqual(request.response.headers["Content-Type"], "image/png")
        self.assertEqual(request.response.headers["Cache-Control"],
                         "max-age=28800")

        request.params["TileRow"] = "16"
        serve()
        self.assertEqual(request.response.headers["Content-Type"], "image/png")
        self.assertEqual(request.response.headers["Cache-Control"],
                         "max-age=28800")
 def test_ondemend_wmtscapabilities(self) -> None:
     with LogCapture("tilecloud_chain", level=30) as log_capture:
         server.pyramid_server = None
         server.tilegeneration = None
         request = DummyRequest()
         request.registry.settings = {
             "tilegeneration_configfile": "tilegeneration/test-serve-wmtscapabilities.yaml",
         }
         request.matchdict["path"] = ["wmts", "1.0.0", "WMTSCapabilities.xml"]
         PyramidView(request)()
         self.assertEqual(request.response.headers["Content-Type"], "application/xml")
         self.assert_result_equals(
             request.response.body.decode("utf-8"),
             CAPABILITIES,
             regex=True,
         )
         log_capture.check()
Exemple #3
0
 def test_ondemend_wmtscapabilities(self, l):
     server.pyramid_server = None
     request = DummyRequest()
     request.registry.settings = {
         'tilegeneration_configfile':
         'tilegeneration/test-serve-wmtscapabilities.yaml',
     }
     request.matchdict['path'] = ['wmts', '1.0.0', 'WMTSCapabilities.xml']
     PyramidView(request)()
     self.assertEqual(request.response.headers['Content-Type'],
                      'application/xml')
     self.assert_result_equals(
         request.response.body.decode('utf-8')
         if PY3 else request.response.body,
         CAPABILITIES,
         regex=True,
     )
     l.check()
    def test_serve_gfi(self, l):
        request = DummyRequest()
        request.registry.settings = {
            'tilegeneration_configfile': 'tilegeneration/test-serve.yaml',
        }
        request.params = {
            'Service': 'WMTS',
            'Version': '1.0.0',
            'Request': 'GetFeatureInfo',
            'Format': 'image/png',
            'Info_Format': 'application/vnd.ogc.gml',
            'Layer': 'point_hash',
            'Query_Layer': 'point_hash',
            'Style': 'default',
            'TileMatrixSet': 'swissgrid_5',
            'TileMatrix': '1',
            'TileRow': '11',
            'TileCol': '14',
            'I': '114',
            'J': '111',
        }
        serve = PyramidView(request)
        serve()
        self.assert_result_equals(
            request.response.body.decode('utf-8') if PY3 else request.response.body,
            u"""<?xml version="1.0" encoding="UTF-8"?>

<msGMLOutput
    xmlns:gml="http://www.opengis.net/gml"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</msGMLOutput>
""")

        request = DummyRequest()
        request.registry.settings = {
            'tilegeneration_configfile': 'tilegeneration/test-serve.yaml',
        }
        request.matchdict = {
            'path': [
                'wmts', '1.0.0', 'point_hash', 'default', '2012', 'swissgrid_5', '1', '11', '14', '114', '111.xml'
            ]
        }
        request.params = {
            'Service': 'WMTS',
            'Version': '1.0.0',
            'Request': 'GetFeatureInfo',
            'Format': 'image/png',
            'Info_Format': 'application/vnd.ogc.gml',
            'Layer': 'point_hash',
            'Query_Layer': 'point_hash',
            'Style': 'default',
            'TileMatrixSet': 'swissgrid_5',
            'TileMatrix': '1',
            'TileRow': '14',
            'TileCol': '11',
            'I': '114',
            'J': '111',
        }
        serve = PyramidView(request)
        serve()
        self.assert_result_equals(
            request.response.body.decode('utf-8') if PY3 else request.response.body,
            u"""<?xml version="1.0" encoding="UTF-8"?>

<msGMLOutput
    xmlns:gml="http://www.opengis.net/gml"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</msGMLOutput>
""")
    def test_bsddb_rest(self, l):
        self.assert_tiles_generated(
            cmd='.build/venv/bin/generate_tiles -d -c tilegeneration/test-bsddb.yaml'
                ' -l point_hash --zoom 1',
            main_func=generate.main,
            directory="/tmp/tiles/bsddb/",
            tiles_pattern='1.0.0/%s',
            tiles=[
                ('point_hash/default/2012/swissgrid_5.png.bsddb')
            ],
            regex=True,
            expected="""The tile generation of layer 'point_hash \(DATE=2012\)' is finish
Nb generated metatiles: 1
Nb metatiles dropped: 0
Nb generated tiles: 64
Nb tiles dropped: 62
Nb tiles stored: 2
Nb tiles in error: 0
Total time: [0-9]+:[0-9][0-9]:[0-9][0-9]
Total size: [89][0-9][0-9] o
Time per tile: [0-9]+ ms
Size per tile: 4[0-9][0-9] o

""",
        )
        # use delete to don't delete the repository
        self.assert_tiles_generated_deleted(
            cmd='.build/venv/bin/generate_controller --capabilities -c tilegeneration/test-bsddb.yaml',
            main_func=controller.main,
            directory="/tmp/tiles/bsddb/",
            tiles_pattern='1.0.0/%s',
            tiles=[
                ('WMTSCapabilities.xml'),
                ('point_hash/default/2012/swissgrid_5.png.bsddb')
            ],
        )

        request = DummyRequest()
        request.registry.settings = {
            'tilegeneration_configfile': 'tilegeneration/test-bsddb.yaml',
        }
        request.matchdict = {
            'path': [
                'wmts', '1.0.0', 'point_hash', 'default', '2012', 'swissgrid_5', '1', '11', '14.png'
            ]
        }
        serve = PyramidView(request)
        serve()
        self.assertEqual(request.response.headers['Content-Type'], 'image/png')
        self.assertEqual(request.response.headers['Cache-Control'], 'max-age=28800')

        request.matchdict['path'][7] = '12'
        self.assertRaises(HTTPNoContent, serve)

        request.matchdict['path'][7] = '11'
        request.matchdict['path'][1] = '0.9'
        self.assertRaises(HTTPBadRequest, serve)

        request.matchdict['path'][1] = '1.0.0'
        request.matchdict['path'][8] = '14.jpeg'
        self.assertRaises(HTTPBadRequest, serve)

        request.matchdict['path'][8] = '14.png'
        request.matchdict['path'][2] = 'test'
        self.assertRaises(HTTPBadRequest, serve)

        request.matchdict['path'][2] = 'point_hash'
        request.matchdict['path'][3] = 'test'
        self.assertRaises(HTTPBadRequest, serve)

        request.matchdict['path'][3] = 'default'
        request.matchdict['path'][5] = 'test'
        self.assertRaises(HTTPBadRequest, serve)

        request.matchdict['path'] = [
            'wmts', 'point_hash', 'default', 'swissgrid_5', '1', '14', '11.png'
        ]
        self.assertRaises(HTTPBadRequest, serve)

        request.matchdict['path'] = [
            'wmts', '1.0.0', 'WMTSCapabilities.xml'
        ]
        PyramidView(request)()
        self.assertEqual(request.response.headers['Content-Type'], 'application/xml')
        self.assert_result_equals(
            request.response.body.decode('utf-8') if PY3 else request.response.body,
            CAPABILITIES,
            regex=True,
        )

        request.matchdict['path'] = [
            'static', '1.0.0', 'WMTSCapabilities.xml'
        ]
        PyramidView(request)()
        self.assertEqual(request.response.headers['Content-Type'], 'application/xml')
        self.assert_result_equals(
            request.response.body.decode('utf-8') if PY3 else request.response.body,
            CAPABILITIES,
            regex=True,
        )

        l.check()
    def test_serve_kvp(self, l):
        self.assert_tiles_generated(
            cmd='.build/venv/bin/generate_tiles -d -c tilegeneration/test-nosns.yaml '
                '-l point_hash --zoom 1',
            main_func=generate.main,
            directory="/tmp/tiles/",
            tiles_pattern='1.0.0/%s',
            tiles=[
                ('point_hash/default/2012/swissgrid_5/1/11/14.png'),
                ('point_hash/default/2012/swissgrid_5/1/15/8.png'),
            ],
            regex=True,
            expected="""The tile generation of layer 'point_hash \(DATE=2012\)' is finish
Nb generated metatiles: 1
Nb metatiles dropped: 0
Nb generated tiles: 64
Nb tiles dropped: 62
Nb tiles stored: 2
Nb tiles in error: 0
Total time: [0-9]+:[0-9][0-9]:[0-9][0-9]
Total size: [89][0-9][0-9] o
Time per tile: [0-9]+ ms
Size per tile: 4[0-9][0-9] o

""",
        )
        # use delete to don't delete the repository
        self.assert_tiles_generated_deleted(
            cmd='.build/venv/bin/generate_controller --capabilities -c tilegeneration/test-nosns.yaml',
            main_func=controller.main,
            directory="/tmp/tiles/",
            tiles_pattern='1.0.0/%s',
            tiles=[
                ('WMTSCapabilities.xml'),
                ('point_hash/default/2012/swissgrid_5/1/11/14.png'),
                ('point_hash/default/2012/swissgrid_5/1/15/8.png'),
            ],
        )

        request = DummyRequest()
        request.registry.settings = {
            'tilegeneration_configfile': 'tilegeneration/test-nosns.yaml',
        }
        request.params = {
            'Service': 'WMTS',
            'Version': '1.0.0',
            'Request': 'GetTile',
            'Format': 'image/png',
            'Layer': 'point_hash',
            'Style': 'default',
            'TileMatrixSet': 'swissgrid_5',
            'TileMatrix': '1',
            'TileRow': '11',
            'TileCol': '14',
        }
        serve = PyramidView(request)
        serve()
        self.assertEqual(request.response.headers['Content-Type'], 'image/png')
        self.assertEqual(request.response.headers['Cache-Control'], 'max-age=28800')

        request.params['TileRow'] = '12'
        self.assertRaises(HTTPNoContent, serve)

        request.params['TileRow'] = '11'
        request.params['Service'] = 'test'
        self.assertRaises(HTTPBadRequest, serve)

        request.params['Service'] = 'WMTS'
        request.params['Request'] = 'test'
        self.assertRaises(HTTPBadRequest, serve)

        request.params['Request'] = 'GetTile'
        request.params['Version'] = '0.9'
        self.assertRaises(HTTPBadRequest, serve)

        request.params['Version'] = '1.0.0'
        request.params['Format'] = 'image/jpeg'
        self.assertRaises(HTTPBadRequest, serve)

        request.params['Format'] = 'image/png'
        request.params['Layer'] = 'test'
        self.assertRaises(HTTPBadRequest, serve)

        request.params['Layer'] = 'point_hash'
        request.params['Style'] = 'test'
        self.assertRaises(HTTPBadRequest, serve)

        request.params['Style'] = 'default'
        request.params['TileMatrixSet'] = 'test'
        self.assertRaises(HTTPBadRequest, serve)

        request.params['TileMatrixSet'] = 'swissgrid_5'
        del request.params['Service']
        self.assertRaises(HTTPBadRequest, serve)

        request.params = {
            'Service': 'WMTS',
            'Version': '1.0.0',
            'Request': 'GetCapabilities',
        }
        PyramidView(request)()
        self.assertEqual(request.response.headers['Content-Type'], 'application/xml')
        self.assert_result_equals(
            request.response.body.decode('utf-8') if PY3 else request.response.body,
            regex=True,
            expected=u"""<\?xml version="1.0" encoding="UTF-8"\?>
<Capabilities version="1.0.0" xmlns="http://www.opengis.net/wmts/1.0" xmlns:ows="http://www.opengis.net/ows/1.1"
              xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:gml="http://www.opengis.net/gml"
              xsi:schemaLocation="http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd">
  <ows:ServiceIdentification> </ows:ServiceIdentification>
  <ows:ServiceProvider> </ows:ServiceProvider>
  <ows:OperationsMetadata>
    <ows:Operation name="GetCapabilities">
      <ows:DCP>
        <ows:HTTP>
          <ows:Get xlink:href="http://wmts1/tiles/wmts/1.0.0/WMTSCapabilities.xml">
            <ows:Constraint name="GetEncoding">
              <ows:AllowedValues>
                <ows:Value>REST</ows:Value>
              </ows:AllowedValues>
            </ows:Constraint>
          </ows:Get>
          <ows:Get xlink:href="http://wmts1/tiles/wmts/">
            <ows:Constraint name="GetEncoding">
              <ows:AllowedValues>
                <ows:Value>KVP</ows:Value>
              </ows:AllowedValues>
            </ows:Constraint>
          </ows:Get>
        </ows:HTTP>
      </ows:DCP>
    </ows:Operation>
    <ows:Operation name="GetTile">
      <ows:DCP>
        <ows:HTTP>
          <ows:Get xlink:href="http://wmts1/tiles/wmts/">
            <ows:Constraint name="GetEncoding">
              <ows:AllowedValues>
                <ows:Value>REST</ows:Value>
                <ows:Value>KVP</ows:Value>
              </ows:AllowedValues>
            </ows:Constraint>
          </ows:Get>
        </ows:HTTP>
      </ows:DCP>
    </ows:Operation>
  </ows:OperationsMetadata>
  <!-- <ServiceMetadataURL xlink:href="" /> -->
  <Contents>

    <Layer>
      <ows:Title>all</ows:Title>
      <ows:Identifier>all</ows:Identifier>
      <Style isDefault="true">
        <ows:Identifier>default</ows:Identifier>
      </Style>
      <Format>image/png</Format>
      <Dimension>
        <ows:Identifier>DATE</ows:Identifier>
        <Default>2012</Default>
        <Value>2005</Value>
        <Value>2010</Value>
        <Value>2012</Value>
      </Dimension>
      <ResourceURL format="image/png" resourceType="tile"
                   template="http://wmts1/tiles/wmts/1.0.0/all/default/"""
            """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
      <TileMatrixSetLink>
        <TileMatrixSet>swissgrid_5</TileMatrixSet>
      </TileMatrixSetLink>
    </Layer>

    <Layer>
      <ows:Title>line</ows:Title>
      <ows:Identifier>line</ows:Identifier>
      <Style isDefault="true">
        <ows:Identifier>default</ows:Identifier>
      </Style>
      <Format>image/png</Format>
      <Dimension>
        <ows:Identifier>DATE</ows:Identifier>
        <Default>2012</Default>
        <Value>2005</Value>
        <Value>2010</Value>
        <Value>2012</Value>
      </Dimension>
      <ResourceURL format="image/png" resourceType="tile"
                   template="http://wmts1/tiles/wmts/1.0.0/line/default/"""
            """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
      <TileMatrixSetLink>
        <TileMatrixSet>swissgrid_5</TileMatrixSet>
      </TileMatrixSetLink>
    </Layer>

    <Layer>
      <ows:Title>mapnik</ows:Title>
      <ows:Identifier>mapnik</ows:Identifier>
      <Style isDefault="true">
        <ows:Identifier>default</ows:Identifier>
      </Style>
      <Format>image/png</Format>
      <Dimension>
        <ows:Identifier>DATE</ows:Identifier>
        <Default>2012</Default>
        <Value>2005</Value>
        <Value>2010</Value>
        <Value>2012</Value>
      </Dimension>
      <ResourceURL format="image/png" resourceType="tile"
                   template="http://wmts1/tiles/wmts/1.0.0/mapnik/default/"""
            """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
      <TileMatrixSetLink>
        <TileMatrixSet>swissgrid_5</TileMatrixSet>
      </TileMatrixSetLink>
    </Layer>

    <Layer>
      <ows:Title>mapnik_grid</ows:Title>
      <ows:Identifier>mapnik_grid</ows:Identifier>
      <Style isDefault="true">
        <ows:Identifier>default</ows:Identifier>
      </Style>
      <Format>application/utfgrid</Format>
      <Dimension>
        <ows:Identifier>DATE</ows:Identifier>
        <Default>2012</Default>
        <Value>2005</Value>
        <Value>2010</Value>
        <Value>2012</Value>
      </Dimension>
      <ResourceURL format="application/utfgrid" resourceType="tile"
                   template="http://wmts1/tiles/wmts/1.0.0/mapnik_grid/default/"""
            """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.json" />
      <TileMatrixSetLink>
        <TileMatrixSet>swissgrid_5</TileMatrixSet>
      </TileMatrixSetLink>
    </Layer>

    <Layer>
      <ows:Title>mapnik_grid_drop</ows:Title>
      <ows:Identifier>mapnik_grid_drop</ows:Identifier>
      <Style isDefault="true">
        <ows:Identifier>default</ows:Identifier>
      </Style>
      <Format>application/utfgrid</Format>
      <Dimension>
        <ows:Identifier>DATE</ows:Identifier>
        <Default>2012</Default>
        <Value>2005</Value>
        <Value>2010</Value>
        <Value>2012</Value>
      </Dimension>
      <ResourceURL format="application/utfgrid" resourceType="tile"
                   template="http://wmts1/tiles/wmts/1.0.0/mapnik_grid_drop/default/"""
            """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.json" />
      <TileMatrixSetLink>
        <TileMatrixSet>swissgrid_5</TileMatrixSet>
      </TileMatrixSetLink>
    </Layer>

    <Layer>
      <ows:Title>point</ows:Title>
      <ows:Identifier>point</ows:Identifier>
      <Style isDefault="true">
        <ows:Identifier>default</ows:Identifier>
      </Style>
      <Format>image/png</Format>
      <Dimension>
        <ows:Identifier>DATE</ows:Identifier>
        <Default>2012</Default>
        <Value>2005</Value>
        <Value>2010</Value>
        <Value>2012</Value>
      </Dimension>
      <ResourceURL format="image/png" resourceType="tile"
                   template="http://wmts1/tiles/wmts/1.0.0/point/default/"""
            """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
      <TileMatrixSetLink>
        <TileMatrixSet>swissgrid_5</TileMatrixSet>
      </TileMatrixSetLink>
    </Layer>

    <Layer>
      <ows:Title>point_error</ows:Title>
      <ows:Identifier>point_error</ows:Identifier>
      <Style isDefault="true">
        <ows:Identifier>default</ows:Identifier>
      </Style>
      <Format>image/png</Format>
      <Dimension>
        <ows:Identifier>DATE</ows:Identifier>
        <Default>2012</Default>
        <Value>2005</Value>
        <Value>2010</Value>
        <Value>2012</Value>
      </Dimension>
      <ResourceURL format="image/png" resourceType="tile"
                   template="http://wmts1/tiles/wmts/1.0.0/point_error/default/"""
            """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
      <TileMatrixSetLink>
        <TileMatrixSet>swissgrid_5</TileMatrixSet>
      </TileMatrixSetLink>
    </Layer>

    <Layer>
      <ows:Title>point_hash</ows:Title>
      <ows:Identifier>point_hash</ows:Identifier>
      <Style isDefault="true">
        <ows:Identifier>default</ows:Identifier>
      </Style>
      <Format>image/png</Format>
      <Dimension>
        <ows:Identifier>DATE</ows:Identifier>
        <Default>2012</Default>
        <Value>2005</Value>
        <Value>2010</Value>
        <Value>2012</Value>
      </Dimension>
      <ResourceURL format="image/png" resourceType="tile"
                   template="http://wmts1/tiles/wmts/1.0.0/point_hash/default/"""
            """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
      <TileMatrixSetLink>
        <TileMatrixSet>swissgrid_5</TileMatrixSet>
      </TileMatrixSetLink>
    </Layer>

    <Layer>
      <ows:Title>point_hash_no_meta</ows:Title>
      <ows:Identifier>point_hash_no_meta</ows:Identifier>
      <Style isDefault="true">
        <ows:Identifier>default</ows:Identifier>
      </Style>
      <Format>image/png</Format>
      <Dimension>
        <ows:Identifier>DATE</ows:Identifier>
        <Default>2012</Default>
        <Value>2005</Value>
        <Value>2010</Value>
        <Value>2012</Value>
      </Dimension>
      <ResourceURL format="image/png" resourceType="tile"
                   template="http://wmts1/tiles/wmts/1.0.0/point_hash_no_meta/default/"""
            """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
      <TileMatrixSetLink>
        <TileMatrixSet>swissgrid_5</TileMatrixSet>
      </TileMatrixSetLink>
    </Layer>

    <Layer>
      <ows:Title>point_px_buffer</ows:Title>
      <ows:Identifier>point_px_buffer</ows:Identifier>
      <Style isDefault="true">
        <ows:Identifier>default</ows:Identifier>
      </Style>
      <Format>image/png</Format>
      <Dimension>
        <ows:Identifier>DATE</ows:Identifier>
        <Default>2012</Default>
        <Value>2005</Value>
        <Value>2010</Value>
        <Value>2012</Value>
      </Dimension>
      <ResourceURL format="image/png" resourceType="tile"
                   template="http://wmts1/tiles/wmts/1.0.0/point_px_buffer/default/"""
            """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
      <TileMatrixSetLink>
        <TileMatrixSet>swissgrid_5</TileMatrixSet>
      </TileMatrixSetLink>
    </Layer>

    <Layer>
      <ows:Title>polygon</ows:Title>
      <ows:Identifier>polygon</ows:Identifier>
      <Style isDefault="true">
        <ows:Identifier>default</ows:Identifier>
      </Style>
      <Format>image/png</Format>
      <Dimension>
        <ows:Identifier>DATE</ows:Identifier>
        <Default>2012</Default>
        <Value>2005</Value>
        <Value>2010</Value>
        <Value>2012</Value>
      </Dimension>
      <ResourceURL format="image/png" resourceType="tile"
                   template="http://wmts1/tiles/wmts/1.0.0/polygon/default/"""
            """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
      <TileMatrixSetLink>
        <TileMatrixSet>swissgrid_5</TileMatrixSet>
      </TileMatrixSetLink>
    </Layer>

    <Layer>
      <ows:Title>polygon2</ows:Title>
      <ows:Identifier>polygon2</ows:Identifier>
      <Style isDefault="true">
        <ows:Identifier>default</ows:Identifier>
      </Style>
      <Format>image/png</Format>
      <Dimension>
        <ows:Identifier>DATE</ows:Identifier>
        <Default>2012</Default>
        <Value>2005</Value>
        <Value>2010</Value>
        <Value>2012</Value>
      </Dimension>
      <ResourceURL format="image/png" resourceType="tile"
                   template="http://wmts1/tiles/wmts/1.0.0/polygon2/default/"""
            """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
      <TileMatrixSetLink>
        <TileMatrixSet>swissgrid_01</TileMatrixSet>
      </TileMatrixSetLink>
    </Layer>



    <TileMatrixSet>
      <ows:Identifier>swissgrid_01</ows:Identifier>
      <ows:SupportedCRS>urn:ogc:def:crs:epsg::21781</ows:SupportedCRS>
      <TileMatrix>
        <ows:Identifier>1</ows:Identifier>
        <ScaleDenominator>3571.4285714[0-9]*</ScaleDenominator>
        <TopLeftCorner>420000 350000</TopLeftCorner>
        <TileWidth>256</TileWidth>
        <TileHeight>256</TileHeight>
        <MatrixWidth>1875</MatrixWidth>
        <MatrixHeight>1250</MatrixHeight>
      </TileMatrix>

      <TileMatrix>
        <ows:Identifier>0_2</ows:Identifier>
        <ScaleDenominator>714.28571428[0-9]*</ScaleDenominator>
        <TopLeftCorner>420000 350000</TopLeftCorner>
        <TileWidth>256</TileWidth>
        <TileHeight>256</TileHeight>
        <MatrixWidth>9375</MatrixWidth>
        <MatrixHeight>6250</MatrixHeight>
      </TileMatrix>

      <TileMatrix>
        <ows:Identifier>0_1</ows:Identifier>
        <ScaleDenominator>357.14285714[0-9]*</ScaleDenominator>
        <TopLeftCorner>420000 350000</TopLeftCorner>
        <TileWidth>256</TileWidth>
        <TileHeight>256</TileHeight>
        <MatrixWidth>18750</MatrixWidth>
        <MatrixHeight>12500</MatrixHeight>
      </TileMatrix>

    </TileMatrixSet>

    <TileMatrixSet>
      <ows:Identifier>swissgrid_025</ows:Identifier>
      <ows:SupportedCRS>urn:ogc:def:crs:epsg::21781</ows:SupportedCRS>
      <TileMatrix>
        <ows:Identifier>0_25</ows:Identifier>
        <ScaleDenominator>892.85714285[0-9]*</ScaleDenominator>
        <TopLeftCorner>420000 350000</TopLeftCorner>
        <TileWidth>256</TileWidth>
        <TileHeight>256</TileHeight>
        <MatrixWidth>7500</MatrixWidth>
        <MatrixHeight>5000</MatrixHeight>
      </TileMatrix>

    </TileMatrixSet>

    <TileMatrixSet>
      <ows:Identifier>swissgrid_2_5</ows:Identifier>
      <ows:SupportedCRS>urn:ogc:def:crs:epsg::21781</ows:SupportedCRS>
      <TileMatrix>
        <ows:Identifier>2_5</ows:Identifier>
        <ScaleDenominator>8928.5714285[0-9]*</ScaleDenominator>
        <TopLeftCorner>420000 350000</TopLeftCorner>
        <TileWidth>256</TileWidth>
        <TileHeight>256</TileHeight>
        <MatrixWidth>750</MatrixWidth>
        <MatrixHeight>500</MatrixHeight>
      </TileMatrix>

    </TileMatrixSet>

    <TileMatrixSet>
      <ows:Identifier>swissgrid_5</ows:Identifier>
      <ows:SupportedCRS>urn:ogc:def:crs:epsg::21781</ows:SupportedCRS>
      <TileMatrix>
        <ows:Identifier>0</ows:Identifier>
        <ScaleDenominator>357142.85714[0-9]*</ScaleDenominator>
        <TopLeftCorner>420000 350000</TopLeftCorner>
        <TileWidth>256</TileWidth>
        <TileHeight>256</TileHeight>
        <MatrixWidth>19</MatrixWidth>
        <MatrixHeight>13</MatrixHeight>
      </TileMatrix>

      <TileMatrix>
        <ows:Identifier>1</ows:Identifier>
        <ScaleDenominator>178571.42857[0-9]*</ScaleDenominator>
        <TopLeftCorner>420000 350000</TopLeftCorner>
        <TileWidth>256</TileWidth>
        <TileHeight>256</TileHeight>
        <MatrixWidth>38</MatrixWidth>
        <MatrixHeight>25</MatrixHeight>
      </TileMatrix>

      <TileMatrix>
        <ows:Identifier>2</ows:Identifier>
        <ScaleDenominator>71428.571428[0-9]*</ScaleDenominator>
        <TopLeftCorner>420000 350000</TopLeftCorner>
        <TileWidth>256</TileWidth>
        <TileHeight>256</TileHeight>
        <MatrixWidth>94</MatrixWidth>
        <MatrixHeight>63</MatrixHeight>
      </TileMatrix>

      <TileMatrix>
        <ows:Identifier>3</ows:Identifier>
        <ScaleDenominator>35714.285714[0-9]*</ScaleDenominator>
        <TopLeftCorner>420000 350000</TopLeftCorner>
        <TileWidth>256</TileWidth>
        <TileHeight>256</TileHeight>
        <MatrixWidth>188</MatrixWidth>
        <MatrixHeight>125</MatrixHeight>
      </TileMatrix>

      <TileMatrix>
        <ows:Identifier>4</ows:Identifier>
        <ScaleDenominator>17857.142857[0-9]*</ScaleDenominator>
        <TopLeftCorner>420000 350000</TopLeftCorner>
        <TileWidth>256</TileWidth>
        <TileHeight>256</TileHeight>
        <MatrixWidth>375</MatrixWidth>
        <MatrixHeight>250</MatrixHeight>
      </TileMatrix>

    </TileMatrixSet>

  </Contents>
</Capabilities>"""
        )

        l.check()
    def test_serve_gfi(self) -> None:
        server.pyramid_server = None
        server.tilegeneration = None
        request = DummyRequest()
        request.registry.settings = {
            "tilegeneration_configfile": "tilegeneration/test-serve.yaml",
        }
        request.params = {
            "Service": "WMTS",
            "Version": "1.0.0",
            "Request": "GetFeatureInfo",
            "Format": "image/png",
            "Info_Format": "application/vnd.ogc.gml",
            "Layer": "point_hash",
            "Query_Layer": "point_hash",
            "Style": "default",
            "TileMatrixSet": "swissgrid_5",
            "TileMatrix": "1",
            "TileRow": "11",
            "TileCol": "14",
            "I": "114",
            "J": "111",
        }
        serve = PyramidView(request)
        serve()
        self.assert_result_equals(
            request.response.body.decode("utf-8"),
            """<?xml version="1.0" encoding="UTF-8"?>

<msGMLOutput
    xmlns:gml="http://www.opengis.net/gml"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</msGMLOutput>
""",
        )

        server.pyramid_server = None
        server.tilegeneration = None
        request = DummyRequest()
        request.registry.settings = {
            "tilegeneration_configfile": "tilegeneration/test-serve.yaml",
        }
        request.matchdict = {
            "path": [
                "wmts",
                "1.0.0",
                "point_hash",
                "default",
                "2012",
                "swissgrid_5",
                "1",
                "11",
                "14",
                "114",
                "111.xml",
            ]
        }
        request.params = {
            "Service": "WMTS",
            "Version": "1.0.0",
            "Request": "GetFeatureInfo",
            "Format": "image/png",
            "Info_Format": "application/vnd.ogc.gml",
            "Layer": "point_hash",
            "Query_Layer": "point_hash",
            "Style": "default",
            "TileMatrixSet": "swissgrid_5",
            "TileMatrix": "1",
            "TileRow": "14",
            "TileCol": "11",
            "I": "114",
            "J": "111",
        }
        serve = PyramidView(request)
        serve()
        self.assert_result_equals(
            request.response.body.decode("utf-8"),
            """<?xml version="1.0" encoding="UTF-8"?>

<msGMLOutput
    xmlns:gml="http://www.opengis.net/gml"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</msGMLOutput>
""",
        )
    def test_bsddb_rest(self):
        with LogCapture("tilecloud_chain", level=30) as log_capture:
            self.assert_tiles_generated(
                cmd=".build/venv/bin/generate_tiles -d -c tilegeneration/test-bsddb.yaml"
                " -l point_hash --zoom 1",
                main_func=generate.main,
                directory="/tmp/tiles/bsddb/",
                tiles_pattern="1.0.0/%s",
                tiles=[("point_hash/default/2012/swissgrid_5.png.bsddb")],
                regex=True,
                expected=r"""The tile generation of layer 'point_hash \(DATE=2012\)' is finish
  Nb generated metatiles: 1
  Nb metatiles dropped: 0
  Nb generated tiles: 64
  Nb tiles dropped: 62
  Nb tiles stored: 2
  Nb tiles in error: 0
  Total time: [0-9]+:[0-9][0-9]:[0-9][0-9]
  Total size: [89][0-9][0-9] o
  Time per tile: [0-9]+ ms
  Size per tile: 4[0-9][0-9] o

  """,
            )

            server.pyramid_server = None
            server.tilegeneration = None
            request = DummyRequest()
            request.registry.settings = {
                "tilegeneration_configfile": "tilegeneration/test-bsddb.yaml",
            }
            request.matchdict = {
                "path": ["wmts", "1.0.0", "point_hash", "default", "2012", "swissgrid_5", "1", "11", "14.png"]
            }
            serve = PyramidView(request)
            serve()
            self.assertEqual(request.response.headers["Content-Type"], "image/png")
            self.assertEqual(request.response.headers["Cache-Control"], "max-age=28800")

            request.matchdict["path"][7] = "12"
            assert isinstance(serve(), HTTPNoContent)

            request.matchdict["path"][7] = "11"
            request.matchdict["path"][1] = "0.9"
            self.assertRaises(HTTPBadRequest, serve)

            request.matchdict["path"][1] = "1.0.0"
            request.matchdict["path"][8] = "14.jpeg"
            self.assertRaises(HTTPBadRequest, serve)

            request.matchdict["path"][8] = "14.png"
            request.matchdict["path"][2] = "test"
            self.assertRaises(HTTPBadRequest, serve)

            request.matchdict["path"][2] = "point_hash"
            request.matchdict["path"][3] = "test"
            self.assertRaises(HTTPBadRequest, serve)

            request.matchdict["path"][3] = "default"
            request.matchdict["path"][5] = "test"
            self.assertRaises(HTTPBadRequest, serve)

            request.matchdict["path"] = ["wmts", "point_hash", "default", "swissgrid_5", "1", "14", "11.png"]
            self.assertRaises(HTTPBadRequest, serve)

            request.matchdict["path"] = ["wmts", "1.0.0", "WMTSCapabilities.xml"]
            PyramidView(request)()
            self.assertEqual(request.response.headers["Content-Type"], "application/xml")
            self.assert_result_equals(
                request.response.body.decode("utf-8"),
                CAPABILITIES,
                regex=True,
            )

            request.matchdict["path"] = ["static", "1.0.0", "WMTSCapabilities.xml"]
            PyramidView(request)()
            self.assertEqual(request.response.headers["Content-Type"], "application/xml")
            self.assert_result_equals(
                request.response.body.decode("utf-8"),
                CAPABILITIES,
                regex=True,
            )

            log_capture.check()
    def test_serve_kvp(self) -> None:
        with LogCapture("tilecloud_chain", level=30) as log_capture:
            self.assert_tiles_generated(
                cmd=".build/venv/bin/generate_tiles -d -c tilegeneration/test-nosns.yaml "
                "-l point_hash --zoom 1",
                main_func=generate.main,
                directory="/tmp/tiles/",
                tiles_pattern="1.0.0/%s",
                tiles=[
                    ("point_hash/default/2012/swissgrid_5/1/11/14.png"),
                    ("point_hash/default/2012/swissgrid_5/1/15/8.png"),
                ],
                regex=True,
                expected=r"""The tile generation of layer 'point_hash \(DATE=2012\)' is finish
  Nb generated metatiles: 1
  Nb metatiles dropped: 0
  Nb generated tiles: 64
  Nb tiles dropped: 62
  Nb tiles stored: 2
  Nb tiles in error: 0
  Total time: [0-9]+:[0-9][0-9]:[0-9][0-9]
  Total size: [89][0-9][0-9] o
  Time per tile: [0-9]+ ms
  Size per tile: 4[0-9][0-9] o

  """,
            )

            server.pyramid_server = None
            server.tilegeneration = None
            request = DummyRequest()
            request.registry.settings = {
                "tilegeneration_configfile": "tilegeneration/test-nosns.yaml",
            }
            request.params = {
                "Service": "WMTS",
                "Version": "1.0.0",
                "Request": "GetTile",
                "Format": "image/png",
                "Layer": "point_hash",
                "Style": "default",
                "TileMatrixSet": "swissgrid_5",
                "TileMatrix": "1",
                "TileRow": "11",
                "TileCol": "14",
            }
            serve = PyramidView(request)
            serve()
            self.assertEqual(request.response.headers["Content-Type"], "image/png")
            self.assertEqual(request.response.headers["Cache-Control"], "max-age=28800")

            request.params["TileRow"] = "12"
            assert isinstance(serve(), HTTPNoContent)

            request.params["TileRow"] = "11"
            request.params["Service"] = "test"
            self.assertRaises(HTTPBadRequest, serve)

            request.params["Service"] = "WMTS"
            request.params["Request"] = "test"
            self.assertRaises(HTTPBadRequest, serve)

            request.params["Request"] = "GetTile"
            request.params["Version"] = "0.9"
            self.assertRaises(HTTPBadRequest, serve)

            request.params["Version"] = "1.0.0"
            request.params["Format"] = "image/jpeg"
            self.assertRaises(HTTPBadRequest, serve)

            request.params["Format"] = "image/png"
            request.params["Layer"] = "test"
            self.assertRaises(HTTPBadRequest, serve)

            request.params["Layer"] = "point_hash"
            request.params["Style"] = "test"
            self.assertRaises(HTTPBadRequest, serve)

            request.params["Style"] = "default"
            request.params["TileMatrixSet"] = "test"
            self.assertRaises(HTTPBadRequest, serve)

            request.params["TileMatrixSet"] = "swissgrid_5"
            del request.params["Service"]
            self.assertRaises(HTTPBadRequest, serve)

            request.params = {
                "Service": "WMTS",
                "Version": "1.0.0",
                "Request": "GetCapabilities",
            }
            PyramidView(request)()
            self.assertEqual(request.response.headers["Content-Type"], "application/xml")
            self.assert_result_equals(
                request.response.body.decode("utf-8"),
                regex=True,
                expected=r"""<\?xml version="1.0" encoding="UTF-8"\?>
  <Capabilities version="1.0.0"
      xmlns="http://www.opengis.net/wmts/1.0"
      xmlns:ows="http://www.opengis.net/ows/1.1"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:gml="http://www.opengis.net/gml"
      xsi:schemaLocation="http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd">
    <ows:OperationsMetadata>
      <ows:Operation name="GetCapabilities">
        <ows:DCP>
          <ows:HTTP>
            <ows:Get xlink:href="http://wmts1/tiles/wmts/1.0.0/WMTSCapabilities.xml">
              <ows:Constraint name="GetEncoding">
                <ows:AllowedValues>
                  <ows:Value>REST</ows:Value>
                </ows:AllowedValues>
              </ows:Constraint>
            </ows:Get>
            <ows:Get xlink:href="http://wmts1/tiles/wmts/">
              <ows:Constraint name="GetEncoding">
                <ows:AllowedValues>
                  <ows:Value>KVP</ows:Value>
                </ows:AllowedValues>
              </ows:Constraint>
            </ows:Get>
          </ows:HTTP>
        </ows:DCP>
      </ows:Operation>
      <ows:Operation name="GetTile">
        <ows:DCP>
          <ows:HTTP>
            <ows:Get xlink:href="http://wmts1/tiles/wmts/">
              <ows:Constraint name="GetEncoding">
                <ows:AllowedValues>
                  <ows:Value>REST</ows:Value>
                  <ows:Value>KVP</ows:Value>
                </ows:AllowedValues>
              </ows:Constraint>
            </ows:Get>
          </ows:HTTP>
        </ows:DCP>
      </ows:Operation>
    </ows:OperationsMetadata>
    <!-- <ServiceMetadataURL xlink:href="" /> -->
    <Contents>

      <Layer>
        <ows:Title>all</ows:Title>
        <ows:Identifier>all</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>default</ows:Identifier>
        </Style>
        <Format>image/png</Format>
        <Dimension>
          <ows:Identifier>DATE</ows:Identifier>
          <Default>2012</Default>
          <Value>2005</Value>
          <Value>2010</Value>
          <Value>2012</Value>
        </Dimension>
        <ResourceURL format="image/png" resourceType="tile"
                    template="http://wmts1/tiles/wmts/1.0.0/all/default/"""
                """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
        <TileMatrixSetLink>
          <TileMatrixSet>swissgrid_5</TileMatrixSet>
        </TileMatrixSetLink>
      </Layer>

      <Layer>
        <ows:Title>line</ows:Title>
        <ows:Identifier>line</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>default</ows:Identifier>
        </Style>
        <Format>image/png</Format>
        <Dimension>
          <ows:Identifier>DATE</ows:Identifier>
          <Default>2012</Default>
          <Value>2005</Value>
          <Value>2010</Value>
          <Value>2012</Value>
        </Dimension>
        <ResourceURL format="image/png" resourceType="tile"
                    template="http://wmts1/tiles/wmts/1.0.0/line/default/"""
                """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
        <TileMatrixSetLink>
          <TileMatrixSet>swissgrid_5</TileMatrixSet>
        </TileMatrixSetLink>
      </Layer>

      <Layer>
        <ows:Title>mapnik</ows:Title>
        <ows:Identifier>mapnik</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>default</ows:Identifier>
        </Style>
        <Format>image/png</Format>
        <Dimension>
          <ows:Identifier>DATE</ows:Identifier>
          <Default>2012</Default>
          <Value>2005</Value>
          <Value>2010</Value>
          <Value>2012</Value>
        </Dimension>
        <ResourceURL format="image/png" resourceType="tile"
                    template="http://wmts1/tiles/wmts/1.0.0/mapnik/default/"""
                """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
        <TileMatrixSetLink>
          <TileMatrixSet>swissgrid_5</TileMatrixSet>
        </TileMatrixSetLink>
      </Layer>

      <Layer>
        <ows:Title>mapnik_grid</ows:Title>
        <ows:Identifier>mapnik_grid</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>default</ows:Identifier>
        </Style>
        <Format>application/utfgrid</Format>
        <Dimension>
          <ows:Identifier>DATE</ows:Identifier>
          <Default>2012</Default>
          <Value>2005</Value>
          <Value>2010</Value>
          <Value>2012</Value>
        </Dimension>
        <ResourceURL format="application/utfgrid" resourceType="tile"
                    template="http://wmts1/tiles/wmts/1.0.0/mapnik_grid/default/"""
                """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.json" />
        <TileMatrixSetLink>
          <TileMatrixSet>swissgrid_5</TileMatrixSet>
        </TileMatrixSetLink>
      </Layer>

      <Layer>
        <ows:Title>mapnik_grid_drop</ows:Title>
        <ows:Identifier>mapnik_grid_drop</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>default</ows:Identifier>
        </Style>
        <Format>application/utfgrid</Format>
        <Dimension>
          <ows:Identifier>DATE</ows:Identifier>
          <Default>2012</Default>
          <Value>2005</Value>
          <Value>2010</Value>
          <Value>2012</Value>
        </Dimension>
        <ResourceURL format="application/utfgrid" resourceType="tile"
                    template="http://wmts1/tiles/wmts/1.0.0/mapnik_grid_drop/default/"""
                """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.json" />
        <TileMatrixSetLink>
          <TileMatrixSet>swissgrid_5</TileMatrixSet>
        </TileMatrixSetLink>
      </Layer>

      <Layer>
        <ows:Title>point</ows:Title>
        <ows:Identifier>point</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>default</ows:Identifier>
        </Style>
        <Format>image/png</Format>
        <Dimension>
          <ows:Identifier>DATE</ows:Identifier>
          <Default>2012</Default>
          <Value>2005</Value>
          <Value>2010</Value>
          <Value>2012</Value>
        </Dimension>
        <ResourceURL format="image/png" resourceType="tile"
                    template="http://wmts1/tiles/wmts/1.0.0/point/default/"""
                """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
        <TileMatrixSetLink>
          <TileMatrixSet>swissgrid_5</TileMatrixSet>
        </TileMatrixSetLink>
      </Layer>

      <Layer>
        <ows:Title>point_error</ows:Title>
        <ows:Identifier>point_error</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>default</ows:Identifier>
        </Style>
        <Format>image/png</Format>
        <Dimension>
          <ows:Identifier>DATE</ows:Identifier>
          <Default>2012</Default>
          <Value>2005</Value>
          <Value>2010</Value>
          <Value>2012</Value>
        </Dimension>
        <ResourceURL format="image/png" resourceType="tile"
                    template="http://wmts1/tiles/wmts/1.0.0/point_error/default/"""
                """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
        <TileMatrixSetLink>
          <TileMatrixSet>swissgrid_5</TileMatrixSet>
        </TileMatrixSetLink>
      </Layer>

      <Layer>
        <ows:Title>point_hash</ows:Title>
        <ows:Identifier>point_hash</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>default</ows:Identifier>
        </Style>
        <Format>image/png</Format>
        <Dimension>
          <ows:Identifier>DATE</ows:Identifier>
          <Default>2012</Default>
          <Value>2005</Value>
          <Value>2010</Value>
          <Value>2012</Value>
        </Dimension>
        <ResourceURL format="image/png" resourceType="tile"
                    template="http://wmts1/tiles/wmts/1.0.0/point_hash/default/"""
                """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
        <TileMatrixSetLink>
          <TileMatrixSet>swissgrid_5</TileMatrixSet>
        </TileMatrixSetLink>
      </Layer>

      <Layer>
        <ows:Title>point_hash_no_meta</ows:Title>
        <ows:Identifier>point_hash_no_meta</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>default</ows:Identifier>
        </Style>
        <Format>image/png</Format>
        <Dimension>
          <ows:Identifier>DATE</ows:Identifier>
          <Default>2012</Default>
          <Value>2005</Value>
          <Value>2010</Value>
          <Value>2012</Value>
        </Dimension>
        <ResourceURL format="image/png" resourceType="tile"
                    template="http://wmts1/tiles/wmts/1.0.0/point_hash_no_meta/default/"""
                """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
        <TileMatrixSetLink>
          <TileMatrixSet>swissgrid_5</TileMatrixSet>
        </TileMatrixSetLink>
      </Layer>

      <Layer>
        <ows:Title>point_px_buffer</ows:Title>
        <ows:Identifier>point_px_buffer</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>default</ows:Identifier>
        </Style>
        <Format>image/png</Format>
        <Dimension>
          <ows:Identifier>DATE</ows:Identifier>
          <Default>2012</Default>
          <Value>2005</Value>
          <Value>2010</Value>
          <Value>2012</Value>
        </Dimension>
        <ResourceURL format="image/png" resourceType="tile"
                    template="http://wmts1/tiles/wmts/1.0.0/point_px_buffer/default/"""
                """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
        <TileMatrixSetLink>
          <TileMatrixSet>swissgrid_5</TileMatrixSet>
        </TileMatrixSetLink>
      </Layer>

      <Layer>
        <ows:Title>polygon</ows:Title>
        <ows:Identifier>polygon</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>default</ows:Identifier>
        </Style>
        <Format>image/png</Format>
        <Dimension>
          <ows:Identifier>DATE</ows:Identifier>
          <Default>2012</Default>
          <Value>2005</Value>
          <Value>2010</Value>
          <Value>2012</Value>
        </Dimension>
        <ResourceURL format="image/png" resourceType="tile"
                    template="http://wmts1/tiles/wmts/1.0.0/polygon/default/"""
                """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
        <TileMatrixSetLink>
          <TileMatrixSet>swissgrid_5</TileMatrixSet>
        </TileMatrixSetLink>
      </Layer>

      <Layer>
        <ows:Title>polygon2</ows:Title>
        <ows:Identifier>polygon2</ows:Identifier>
        <Style isDefault="true">
          <ows:Identifier>default</ows:Identifier>
        </Style>
        <Format>image/png</Format>
        <Dimension>
          <ows:Identifier>DATE</ows:Identifier>
          <Default>2012</Default>
          <Value>2005</Value>
          <Value>2010</Value>
          <Value>2012</Value>
        </Dimension>
        <ResourceURL format="image/png" resourceType="tile"
                    template="http://wmts1/tiles/wmts/1.0.0/polygon2/default/"""
                """{DATE}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
        <TileMatrixSetLink>
          <TileMatrixSet>swissgrid_01</TileMatrixSet>
        </TileMatrixSetLink>
      </Layer>



      <TileMatrixSet>
        <ows:Identifier>swissgrid_01</ows:Identifier>
        <ows:SupportedCRS>urn:ogc:def:crs:EPSG::21781</ows:SupportedCRS>
        <TileMatrix>
          <ows:Identifier>1</ows:Identifier>
          <ScaleDenominator>3571.4285714[0-9]*</ScaleDenominator>
          <TopLeftCorner>420000 350000</TopLeftCorner>
          <TileWidth>256</TileWidth>
          <TileHeight>256</TileHeight>
          <MatrixWidth>1875</MatrixWidth>
          <MatrixHeight>1250</MatrixHeight>
        </TileMatrix>
        <TileMatrix>
          <ows:Identifier>0_2</ows:Identifier>
          <ScaleDenominator>714.28571428[0-9]*</ScaleDenominator>
          <TopLeftCorner>420000 350000</TopLeftCorner>
          <TileWidth>256</TileWidth>
          <TileHeight>256</TileHeight>
          <MatrixWidth>9375</MatrixWidth>
          <MatrixHeight>6250</MatrixHeight>
        </TileMatrix>
        <TileMatrix>
          <ows:Identifier>0_1</ows:Identifier>
          <ScaleDenominator>357.14285714[0-9]*</ScaleDenominator>
          <TopLeftCorner>420000 350000</TopLeftCorner>
          <TileWidth>256</TileWidth>
          <TileHeight>256</TileHeight>
          <MatrixWidth>18750</MatrixWidth>
          <MatrixHeight>12500</MatrixHeight>
        </TileMatrix>
      </TileMatrixSet>
      <TileMatrixSet>
        <ows:Identifier>swissgrid_025</ows:Identifier>
        <ows:SupportedCRS>urn:ogc:def:crs:EPSG::21781</ows:SupportedCRS>
        <TileMatrix>
          <ows:Identifier>0_25</ows:Identifier>
          <ScaleDenominator>892.85714285[0-9]*</ScaleDenominator>
          <TopLeftCorner>420000 350000</TopLeftCorner>
          <TileWidth>256</TileWidth>
          <TileHeight>256</TileHeight>
          <MatrixWidth>7500</MatrixWidth>
          <MatrixHeight>5000</MatrixHeight>
        </TileMatrix>
      </TileMatrixSet>
      <TileMatrixSet>
        <ows:Identifier>swissgrid_2_5</ows:Identifier>
        <ows:SupportedCRS>urn:ogc:def:crs:EPSG::21781</ows:SupportedCRS>
        <TileMatrix>
          <ows:Identifier>2_5</ows:Identifier>
          <ScaleDenominator>8928.5714285[0-9]*</ScaleDenominator>
          <TopLeftCorner>420000 350000</TopLeftCorner>
          <TileWidth>256</TileWidth>
          <TileHeight>256</TileHeight>
          <MatrixWidth>750</MatrixWidth>
          <MatrixHeight>500</MatrixHeight>
        </TileMatrix>
      </TileMatrixSet>
      <TileMatrixSet>
        <ows:Identifier>swissgrid_5</ows:Identifier>
        <ows:SupportedCRS>urn:ogc:def:crs:EPSG::21781</ows:SupportedCRS>
        <TileMatrix>
          <ows:Identifier>0</ows:Identifier>
          <ScaleDenominator>357142.85714[0-9]*</ScaleDenominator>
          <TopLeftCorner>420000 350000</TopLeftCorner>
          <TileWidth>256</TileWidth>
          <TileHeight>256</TileHeight>
          <MatrixWidth>19</MatrixWidth>
          <MatrixHeight>13</MatrixHeight>
        </TileMatrix>
        <TileMatrix>
          <ows:Identifier>1</ows:Identifier>
          <ScaleDenominator>178571.42857[0-9]*</ScaleDenominator>
          <TopLeftCorner>420000 350000</TopLeftCorner>
          <TileWidth>256</TileWidth>
          <TileHeight>256</TileHeight>
          <MatrixWidth>38</MatrixWidth>
          <MatrixHeight>25</MatrixHeight>
        </TileMatrix>
        <TileMatrix>
          <ows:Identifier>2</ows:Identifier>
          <ScaleDenominator>71428.571428[0-9]*</ScaleDenominator>
          <TopLeftCorner>420000 350000</TopLeftCorner>
          <TileWidth>256</TileWidth>
          <TileHeight>256</TileHeight>
          <MatrixWidth>94</MatrixWidth>
          <MatrixHeight>63</MatrixHeight>
        </TileMatrix>
        <TileMatrix>
          <ows:Identifier>3</ows:Identifier>
          <ScaleDenominator>35714.285714[0-9]*</ScaleDenominator>
          <TopLeftCorner>420000 350000</TopLeftCorner>
          <TileWidth>256</TileWidth>
          <TileHeight>256</TileHeight>
          <MatrixWidth>188</MatrixWidth>
          <MatrixHeight>125</MatrixHeight>
        </TileMatrix>
        <TileMatrix>
          <ows:Identifier>4</ows:Identifier>
          <ScaleDenominator>17857.142857[0-9]*</ScaleDenominator>
          <TopLeftCorner>420000 350000</TopLeftCorner>
          <TileWidth>256</TileWidth>
          <TileHeight>256</TileHeight>
          <MatrixWidth>375</MatrixWidth>
          <MatrixHeight>250</MatrixHeight>
        </TileMatrix>
      </TileMatrixSet>
    </Contents>
  </Capabilities>""",
            )

            log_capture.check()