MapProxy 2.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- MapProxy-2.1.0.dist-info/AUTHORS.txt +33 -0
- MapProxy-2.1.0.dist-info/COPYING.txt +60 -0
- MapProxy-2.1.0.dist-info/LICENSE.txt +202 -0
- MapProxy-2.1.0.dist-info/METADATA +165 -0
- MapProxy-2.1.0.dist-info/RECORD +459 -0
- MapProxy-2.1.0.dist-info/WHEEL +5 -0
- MapProxy-2.1.0.dist-info/entry_points.txt +4 -0
- MapProxy-2.1.0.dist-info/top_level.txt +1 -0
- mapproxy/__init__.py +0 -0
- mapproxy/cache/__init__.py +36 -0
- mapproxy/cache/azureblob.py +145 -0
- mapproxy/cache/base.py +120 -0
- mapproxy/cache/compact.py +665 -0
- mapproxy/cache/couchdb.py +301 -0
- mapproxy/cache/dummy.py +36 -0
- mapproxy/cache/file.py +200 -0
- mapproxy/cache/geopackage.py +647 -0
- mapproxy/cache/legend.py +87 -0
- mapproxy/cache/mbtiles.py +411 -0
- mapproxy/cache/meta.py +80 -0
- mapproxy/cache/path.py +261 -0
- mapproxy/cache/redis.py +152 -0
- mapproxy/cache/renderd.py +100 -0
- mapproxy/cache/riak.py +206 -0
- mapproxy/cache/s3.py +209 -0
- mapproxy/cache/tile.py +736 -0
- mapproxy/client/__init__.py +0 -0
- mapproxy/client/arcgis.py +82 -0
- mapproxy/client/cgi.py +141 -0
- mapproxy/client/http.py +295 -0
- mapproxy/client/log.py +33 -0
- mapproxy/client/tile.py +158 -0
- mapproxy/client/wms.py +255 -0
- mapproxy/compat/__init__.py +0 -0
- mapproxy/compat/image.py +86 -0
- mapproxy/config/__init__.py +22 -0
- mapproxy/config/config-schema.json +813 -0
- mapproxy/config/config.py +213 -0
- mapproxy/config/coverage.py +108 -0
- mapproxy/config/defaults.py +102 -0
- mapproxy/config/loader.py +2399 -0
- mapproxy/config/spec.py +657 -0
- mapproxy/config/validator.py +242 -0
- mapproxy/config_template/__init__.py +0 -0
- mapproxy/config_template/base_config/config.wsgi +10 -0
- mapproxy/config_template/base_config/full_example.yaml +598 -0
- mapproxy/config_template/base_config/full_seed_example.yaml +79 -0
- mapproxy/config_template/base_config/log.ini +35 -0
- mapproxy/config_template/base_config/mapproxy.yaml +60 -0
- mapproxy/config_template/base_config/seed.yaml +27 -0
- mapproxy/exception.py +149 -0
- mapproxy/featureinfo.py +251 -0
- mapproxy/grid.py +1199 -0
- mapproxy/image/__init__.py +549 -0
- mapproxy/image/fonts/DejaVuSans.ttf +0 -0
- mapproxy/image/fonts/DejaVuSansMono.ttf +0 -0
- mapproxy/image/fonts/LICENSE +99 -0
- mapproxy/image/fonts/__init__.py +0 -0
- mapproxy/image/mask.py +79 -0
- mapproxy/image/merge.py +323 -0
- mapproxy/image/message.py +357 -0
- mapproxy/image/opts.py +185 -0
- mapproxy/image/tile.py +171 -0
- mapproxy/image/transform.py +350 -0
- mapproxy/layer.py +489 -0
- mapproxy/multiapp.py +230 -0
- mapproxy/proj.py +309 -0
- mapproxy/request/__init__.py +18 -0
- mapproxy/request/arcgis.py +268 -0
- mapproxy/request/base.py +466 -0
- mapproxy/request/tile.py +131 -0
- mapproxy/request/wms/__init__.py +829 -0
- mapproxy/request/wms/exception.py +107 -0
- mapproxy/request/wmts.py +442 -0
- mapproxy/response.py +237 -0
- mapproxy/script/__init__.py +0 -0
- mapproxy/script/conf/__init__.py +0 -0
- mapproxy/script/conf/app.py +222 -0
- mapproxy/script/conf/caches.py +44 -0
- mapproxy/script/conf/geopackage.py +136 -0
- mapproxy/script/conf/layers.py +54 -0
- mapproxy/script/conf/seeds.py +36 -0
- mapproxy/script/conf/sources.py +88 -0
- mapproxy/script/conf/utils.py +148 -0
- mapproxy/script/defrag.py +187 -0
- mapproxy/script/export.py +337 -0
- mapproxy/script/grids.py +198 -0
- mapproxy/script/scales.py +134 -0
- mapproxy/script/util.py +410 -0
- mapproxy/script/wms_capabilities.py +160 -0
- mapproxy/seed/__init__.py +0 -0
- mapproxy/seed/cachelock.py +127 -0
- mapproxy/seed/cleanup.py +191 -0
- mapproxy/seed/config.py +481 -0
- mapproxy/seed/script.py +391 -0
- mapproxy/seed/seeder.py +551 -0
- mapproxy/seed/spec.py +66 -0
- mapproxy/seed/util.py +266 -0
- mapproxy/service/__init__.py +14 -0
- mapproxy/service/base.py +45 -0
- mapproxy/service/demo.py +364 -0
- mapproxy/service/kml.py +333 -0
- mapproxy/service/ows.py +39 -0
- mapproxy/service/template_helper.py +55 -0
- mapproxy/service/templates/demo/capabilities_demo.html +18 -0
- mapproxy/service/templates/demo/demo.html +181 -0
- mapproxy/service/templates/demo/openlayers-demo.cfg +16 -0
- mapproxy/service/templates/demo/static/img/blank.gif +0 -0
- mapproxy/service/templates/demo/static/img/east-mini.png +0 -0
- mapproxy/service/templates/demo/static/img/north-mini.png +0 -0
- mapproxy/service/templates/demo/static/img/south-mini.png +0 -0
- mapproxy/service/templates/demo/static/img/west-mini.png +0 -0
- mapproxy/service/templates/demo/static/img/zoom-minus-mini.png +0 -0
- mapproxy/service/templates/demo/static/img/zoom-plus-mini.png +0 -0
- mapproxy/service/templates/demo/static/img/zoom-world-mini.png +0 -0
- mapproxy/service/templates/demo/static/logo.png +0 -0
- mapproxy/service/templates/demo/static/ol.css +345 -0
- mapproxy/service/templates/demo/static/ol.js +4 -0
- mapproxy/service/templates/demo/static/proj4.min.js +1 -0
- mapproxy/service/templates/demo/static/proj4defs.js +1 -0
- mapproxy/service/templates/demo/static/site.css +137 -0
- mapproxy/service/templates/demo/static/theme/default/framedCloud.css +0 -0
- mapproxy/service/templates/demo/static/theme/default/google.css +17 -0
- mapproxy/service/templates/demo/static/theme/default/ie6-style.css +10 -0
- mapproxy/service/templates/demo/static/theme/default/style.css +482 -0
- mapproxy/service/templates/demo/static.html +34 -0
- mapproxy/service/templates/demo/tms_demo.html +117 -0
- mapproxy/service/templates/demo/wms_demo.html +144 -0
- mapproxy/service/templates/demo/wmts_demo.html +118 -0
- mapproxy/service/templates/tms_capabilities.xml +13 -0
- mapproxy/service/templates/tms_exception.xml +4 -0
- mapproxy/service/templates/tms_root_resource.xml +7 -0
- mapproxy/service/templates/tms_tilemap_capabilities.xml +14 -0
- mapproxy/service/templates/wms100capabilities.xml +112 -0
- mapproxy/service/templates/wms100exception.xml +4 -0
- mapproxy/service/templates/wms110capabilities.xml +152 -0
- mapproxy/service/templates/wms110exception.xml +5 -0
- mapproxy/service/templates/wms111capabilities.xml +183 -0
- mapproxy/service/templates/wms111exception.xml +5 -0
- mapproxy/service/templates/wms130capabilities.xml +326 -0
- mapproxy/service/templates/wms130exception.xml +8 -0
- mapproxy/service/templates/wmts100capabilities.xml +155 -0
- mapproxy/service/templates/wmts100exception.xml +9 -0
- mapproxy/service/tile.py +540 -0
- mapproxy/service/wms.py +868 -0
- mapproxy/service/wmts.py +387 -0
- mapproxy/source/__init__.py +83 -0
- mapproxy/source/arcgis.py +39 -0
- mapproxy/source/error.py +40 -0
- mapproxy/source/mapnik.py +262 -0
- mapproxy/source/tile.py +97 -0
- mapproxy/source/wms.py +273 -0
- mapproxy/srs.py +734 -0
- mapproxy/template.py +54 -0
- mapproxy/test/__init__.py +0 -0
- mapproxy/test/conftest.py +8 -0
- mapproxy/test/helper.py +255 -0
- mapproxy/test/http.py +511 -0
- mapproxy/test/image.py +219 -0
- mapproxy/test/mocker.py +2291 -0
- mapproxy/test/schemas/inspire/common/1.0/common.xsd +1461 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_bul.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_cze.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_dan.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_dut.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_eng.xsd +155 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_est.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_fin.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_fre.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_ger.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_gle.xsd +109 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_gre.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_hun.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_ita.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_lav.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_lit.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_mlt.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_pol.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_por.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_rum.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_slo.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_slv.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_spa.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/enums/enum_swe.xsd +108 -0
- mapproxy/test/schemas/inspire/common/1.0/network.xsd +521 -0
- mapproxy/test/schemas/inspire/inspire_vs/1.0/inspire_vs.xsd +19 -0
- mapproxy/test/schemas/kml/2.2.0/ReadMe.txt +14 -0
- mapproxy/test/schemas/kml/2.2.0/atom-author-link.xsd +66 -0
- mapproxy/test/schemas/kml/2.2.0/ogckml22.xsd +1646 -0
- mapproxy/test/schemas/kml/2.2.0/xAL.xsd +1680 -0
- mapproxy/test/schemas/ows/1.1.0/ReadMe.txt +87 -0
- mapproxy/test/schemas/ows/1.1.0/ows19115subset.xsd +235 -0
- mapproxy/test/schemas/ows/1.1.0/owsAll.xsd +23 -0
- mapproxy/test/schemas/ows/1.1.0/owsCommon.xsd +157 -0
- mapproxy/test/schemas/ows/1.1.0/owsContents.xsd +86 -0
- mapproxy/test/schemas/ows/1.1.0/owsDataIdentification.xsd +127 -0
- mapproxy/test/schemas/ows/1.1.0/owsDomainType.xsd +279 -0
- mapproxy/test/schemas/ows/1.1.0/owsExceptionReport.xsd +76 -0
- mapproxy/test/schemas/ows/1.1.0/owsGetCapabilities.xsd +112 -0
- mapproxy/test/schemas/ows/1.1.0/owsGetResourceByID.xsd +51 -0
- mapproxy/test/schemas/ows/1.1.0/owsInputOutputData.xsd +59 -0
- mapproxy/test/schemas/ows/1.1.0/owsManifest.xsd +125 -0
- mapproxy/test/schemas/ows/1.1.0/owsOperationsMetadata.xsd +140 -0
- mapproxy/test/schemas/ows/1.1.0/owsServiceIdentification.xsd +60 -0
- mapproxy/test/schemas/ows/1.1.0/owsServiceProvider.xsd +47 -0
- mapproxy/test/schemas/sld/1.1.0/sld_capabilities.xsd +27 -0
- mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.dtd +353 -0
- mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.xml +188 -0
- mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.dtd +524 -0
- mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.xml +260 -0
- mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.dtd +273 -0
- mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.xml +303 -0
- mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.dtd +6 -0
- mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.xml +33 -0
- mapproxy/test/schemas/wms/1.1.1/OGC-exception.xsd +68 -0
- mapproxy/test/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd +22 -0
- mapproxy/test/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd +274 -0
- mapproxy/test/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd +5 -0
- mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.dtd +276 -0
- mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.xml +303 -0
- mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.dtd +6 -0
- mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.xml +33 -0
- mapproxy/test/schemas/wms/1.3.0/ReadMe.txt +8 -0
- mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xml +277 -0
- mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xsd +611 -0
- mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xml +34 -0
- mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xsd +28 -0
- mapproxy/test/schemas/wmsc/1.1.1/OGC-exception.xsd +68 -0
- mapproxy/test/schemas/wmsc/1.1.1/WMS_DescribeLayerResponse.dtd +22 -0
- mapproxy/test/schemas/wmsc/1.1.1/WMS_MS_Capabilities.dtd +283 -0
- mapproxy/test/schemas/wmsc/1.1.1/WMS_exception_1_1_1.dtd +5 -0
- mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.dtd +276 -0
- mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.xml +303 -0
- mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.dtd +6 -0
- mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.xml +33 -0
- mapproxy/test/schemas/wmts/1.0/ReadMe.txt +32 -0
- mapproxy/test/schemas/wmts/1.0/wmts.xsd +28 -0
- mapproxy/test/schemas/wmts/1.0/wmtsAbstract.wsdl +151 -0
- mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_request.xsd +38 -0
- mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_response.xsd +564 -0
- mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_request.xsd +57 -0
- mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_response.xsd +72 -0
- mapproxy/test/schemas/wmts/1.0/wmtsGetTile_request.xsd +91 -0
- mapproxy/test/schemas/wmts/1.0/wmtsKVP.xsd +76 -0
- mapproxy/test/schemas/wmts/1.0/wmtsPayload_response.xsd +70 -0
- mapproxy/test/schemas/xlink/1.0.0/ReadMe.txt +6 -0
- mapproxy/test/schemas/xlink/1.0.0/xlinks.xsd +122 -0
- mapproxy/test/schemas/xml.xsd +287 -0
- mapproxy/test/system/__init__.py +98 -0
- mapproxy/test/system/fixture/arcgis.yaml +57 -0
- mapproxy/test/system/fixture/auth.yaml +70 -0
- mapproxy/test/system/fixture/cache.mbtiles +0 -0
- mapproxy/test/system/fixture/cache_azureblob.yaml +59 -0
- mapproxy/test/system/fixture/cache_band_merge.yaml +73 -0
- mapproxy/test/system/fixture/cache_bulk_meta_tiles.yaml +24 -0
- mapproxy/test/system/fixture/cache_coverage.yaml +84 -0
- mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png +0 -0
- mapproxy/test/system/fixture/cache_data/wms_cache_EPSG900913/01/000/000/000/000/000/001.jpeg +0 -0
- mapproxy/test/system/fixture/cache_data/wms_cache_transparent_EPSG900913/01/000/000/000/000/000/001.png +0 -0
- mapproxy/test/system/fixture/cache_geopackage.yaml +56 -0
- mapproxy/test/system/fixture/cache_grid_names.yaml +50 -0
- mapproxy/test/system/fixture/cache_mbtiles.yaml +28 -0
- mapproxy/test/system/fixture/cache_s3.yaml +58 -0
- mapproxy/test/system/fixture/cache_source.yaml +81 -0
- mapproxy/test/system/fixture/combined_sources.yaml +130 -0
- mapproxy/test/system/fixture/coverage.yaml +77 -0
- mapproxy/test/system/fixture/demo.yaml +135 -0
- mapproxy/test/system/fixture/dimension.yaml +59 -0
- mapproxy/test/system/fixture/disable_storage.yaml +25 -0
- mapproxy/test/system/fixture/empty_ogrdata.geojson +1 -0
- mapproxy/test/system/fixture/formats.yaml +72 -0
- mapproxy/test/system/fixture/inspire.yaml +101 -0
- mapproxy/test/system/fixture/inspire_full.yaml +124 -0
- mapproxy/test/system/fixture/kml_layer.yaml +66 -0
- mapproxy/test/system/fixture/layer.yaml +260 -0
- mapproxy/test/system/fixture/layergroups.yaml +57 -0
- mapproxy/test/system/fixture/layergroups_root.yaml +106 -0
- mapproxy/test/system/fixture/legendgraphic.yaml +93 -0
- mapproxy/test/system/fixture/mapnik_source.yaml +66 -0
- mapproxy/test/system/fixture/mapproxy_export.yaml +12 -0
- mapproxy/test/system/fixture/mapserver.yaml +23 -0
- mapproxy/test/system/fixture/minimal_cgi.py +16 -0
- mapproxy/test/system/fixture/mixed_mode.yaml +49 -0
- mapproxy/test/system/fixture/multi_cache_layers.yaml +111 -0
- mapproxy/test/system/fixture/multiapp1.yaml +20 -0
- mapproxy/test/system/fixture/multiapp2.yaml +19 -0
- mapproxy/test/system/fixture/renderd_client.yaml +55 -0
- mapproxy/test/system/fixture/scalehints.yaml +70 -0
- mapproxy/test/system/fixture/seed.yaml +94 -0
- mapproxy/test/system/fixture/seed_mapproxy.yaml +39 -0
- mapproxy/test/system/fixture/seed_old.yaml +12 -0
- mapproxy/test/system/fixture/seed_timeouts.yaml +12 -0
- mapproxy/test/system/fixture/seed_timeouts_mapproxy.yaml +27 -0
- mapproxy/test/system/fixture/seedonly.yaml +51 -0
- mapproxy/test/system/fixture/sld.yaml +35 -0
- mapproxy/test/system/fixture/source_errors.yaml +84 -0
- mapproxy/test/system/fixture/source_errors_raise.yaml +82 -0
- mapproxy/test/system/fixture/tileservice_origin.yaml +26 -0
- mapproxy/test/system/fixture/tileservice_refresh.yaml +59 -0
- mapproxy/test/system/fixture/tilesource_minmax_res.yaml +22 -0
- mapproxy/test/system/fixture/util-conf-base-grids.yaml +5 -0
- mapproxy/test/system/fixture/util-conf-overwrite.yaml +13 -0
- mapproxy/test/system/fixture/util-conf-wms-111-cap.xml +90 -0
- mapproxy/test/system/fixture/util_grids.yaml +29 -0
- mapproxy/test/system/fixture/util_wms_capabilities111.xml +130 -0
- mapproxy/test/system/fixture/util_wms_capabilities130.xml +100 -0
- mapproxy/test/system/fixture/util_wms_capabilities_service_exception.xml +5 -0
- mapproxy/test/system/fixture/watermark.yaml +50 -0
- mapproxy/test/system/fixture/wms_srs_extent.yaml +39 -0
- mapproxy/test/system/fixture/wms_versions.yaml +38 -0
- mapproxy/test/system/fixture/wmts.yaml +134 -0
- mapproxy/test/system/fixture/wmts_dimensions.yaml +57 -0
- mapproxy/test/system/fixture/xslt_featureinfo.yaml +54 -0
- mapproxy/test/system/fixture/xslt_featureinfo_input.yaml +51 -0
- mapproxy/test/system/test_arcgis.py +156 -0
- mapproxy/test/system/test_auth.py +1133 -0
- mapproxy/test/system/test_behind_proxy.py +75 -0
- mapproxy/test/system/test_bulk_meta_tiles.py +106 -0
- mapproxy/test/system/test_cache_azureblob.py +127 -0
- mapproxy/test/system/test_cache_band_merge.py +103 -0
- mapproxy/test/system/test_cache_coverage.py +168 -0
- mapproxy/test/system/test_cache_geopackage.py +144 -0
- mapproxy/test/system/test_cache_grid_names.py +89 -0
- mapproxy/test/system/test_cache_mbtiles.py +85 -0
- mapproxy/test/system/test_cache_s3.py +115 -0
- mapproxy/test/system/test_cache_source.py +146 -0
- mapproxy/test/system/test_combined_sources.py +335 -0
- mapproxy/test/system/test_coverage.py +140 -0
- mapproxy/test/system/test_decorate_img.py +214 -0
- mapproxy/test/system/test_demo.py +56 -0
- mapproxy/test/system/test_demo_with_extra_service.py +57 -0
- mapproxy/test/system/test_dimensions.py +279 -0
- mapproxy/test/system/test_disable_storage.py +42 -0
- mapproxy/test/system/test_formats.py +219 -0
- mapproxy/test/system/test_inspire_vs.py +173 -0
- mapproxy/test/system/test_kml.py +264 -0
- mapproxy/test/system/test_layergroups.py +160 -0
- mapproxy/test/system/test_legendgraphic.py +308 -0
- mapproxy/test/system/test_mapnik.py +162 -0
- mapproxy/test/system/test_mapserver.py +83 -0
- mapproxy/test/system/test_mixed_mode_format.py +201 -0
- mapproxy/test/system/test_multi_cache_layers.py +169 -0
- mapproxy/test/system/test_multiapp.py +92 -0
- mapproxy/test/system/test_refresh.py +206 -0
- mapproxy/test/system/test_renderd_client.py +304 -0
- mapproxy/test/system/test_response_headers.py +54 -0
- mapproxy/test/system/test_scalehints.py +140 -0
- mapproxy/test/system/test_seed.py +425 -0
- mapproxy/test/system/test_seed_only.py +93 -0
- mapproxy/test/system/test_sld.py +120 -0
- mapproxy/test/system/test_source_errors.py +377 -0
- mapproxy/test/system/test_tilesource_minmax_res.py +54 -0
- mapproxy/test/system/test_tms.py +277 -0
- mapproxy/test/system/test_tms_origin.py +46 -0
- mapproxy/test/system/test_util_conf.py +434 -0
- mapproxy/test/system/test_util_export.py +210 -0
- mapproxy/test/system/test_util_grids.py +88 -0
- mapproxy/test/system/test_util_wms_capabilities.py +182 -0
- mapproxy/test/system/test_watermark.py +91 -0
- mapproxy/test/system/test_wms.py +1616 -0
- mapproxy/test/system/test_wms_srs_extent.py +165 -0
- mapproxy/test/system/test_wms_version.py +85 -0
- mapproxy/test/system/test_wmsc.py +116 -0
- mapproxy/test/system/test_wmts.py +334 -0
- mapproxy/test/system/test_wmts_dimensions.py +206 -0
- mapproxy/test/system/test_wmts_restful.py +198 -0
- mapproxy/test/system/test_xslt_featureinfo.py +423 -0
- mapproxy/test/test_http_helper.py +217 -0
- mapproxy/test/unit/__init__.py +0 -0
- mapproxy/test/unit/epsg +2 -0
- mapproxy/test/unit/polygons/polygons.dbf +0 -0
- mapproxy/test/unit/polygons/polygons.shp +0 -0
- mapproxy/test/unit/polygons/polygons.shx +0 -0
- mapproxy/test/unit/test_async.py +242 -0
- mapproxy/test/unit/test_auth.py +430 -0
- mapproxy/test/unit/test_cache.py +1356 -0
- mapproxy/test/unit/test_cache_azureblob.py +97 -0
- mapproxy/test/unit/test_cache_compact.py +324 -0
- mapproxy/test/unit/test_cache_couchdb.py +118 -0
- mapproxy/test/unit/test_cache_geopackage.py +256 -0
- mapproxy/test/unit/test_cache_redis.py +123 -0
- mapproxy/test/unit/test_cache_riak.py +80 -0
- mapproxy/test/unit/test_cache_s3.py +93 -0
- mapproxy/test/unit/test_cache_tile.py +477 -0
- mapproxy/test/unit/test_client.py +488 -0
- mapproxy/test/unit/test_client_arcgis.py +74 -0
- mapproxy/test/unit/test_client_cgi.py +140 -0
- mapproxy/test/unit/test_collections.py +116 -0
- mapproxy/test/unit/test_concat_legends.py +37 -0
- mapproxy/test/unit/test_conf_loader.py +1267 -0
- mapproxy/test/unit/test_conf_validator.py +427 -0
- mapproxy/test/unit/test_config.py +118 -0
- mapproxy/test/unit/test_decorate_img.py +185 -0
- mapproxy/test/unit/test_exceptions.py +270 -0
- mapproxy/test/unit/test_featureinfo.py +313 -0
- mapproxy/test/unit/test_file_lock_load.py +49 -0
- mapproxy/test/unit/test_geom.py +512 -0
- mapproxy/test/unit/test_grid.py +1279 -0
- mapproxy/test/unit/test_image.py +1051 -0
- mapproxy/test/unit/test_image_mask.py +181 -0
- mapproxy/test/unit/test_image_messages.py +209 -0
- mapproxy/test/unit/test_image_options.py +160 -0
- mapproxy/test/unit/test_isodate.py +118 -0
- mapproxy/test/unit/test_multiapp.py +163 -0
- mapproxy/test/unit/test_ogr_reader.py +51 -0
- mapproxy/test/unit/test_request.py +745 -0
- mapproxy/test/unit/test_request_wmts.py +178 -0
- mapproxy/test/unit/test_response.py +78 -0
- mapproxy/test/unit/test_seed.py +365 -0
- mapproxy/test/unit/test_seed_cachelock.py +91 -0
- mapproxy/test/unit/test_srs.py +215 -0
- mapproxy/test/unit/test_tiled_source.py +122 -0
- mapproxy/test/unit/test_tilefilter.py +31 -0
- mapproxy/test/unit/test_times.py +25 -0
- mapproxy/test/unit/test_timeutils.py +50 -0
- mapproxy/test/unit/test_util_conf_utils.py +75 -0
- mapproxy/test/unit/test_utils.py +476 -0
- mapproxy/test/unit/test_wms_capabilities.py +44 -0
- mapproxy/test/unit/test_wms_layer.py +113 -0
- mapproxy/test/unit/test_yaml.py +68 -0
- mapproxy/tilefilter.py +61 -0
- mapproxy/util/__init__.py +0 -0
- mapproxy/util/async_.py +229 -0
- mapproxy/util/collections.py +134 -0
- mapproxy/util/coverage.py +337 -0
- mapproxy/util/ext/__init__.py +14 -0
- mapproxy/util/ext/dictspec/__init__.py +1 -0
- mapproxy/util/ext/dictspec/spec.py +131 -0
- mapproxy/util/ext/dictspec/test/__init__.py +0 -0
- mapproxy/util/ext/dictspec/test/test_validator.py +278 -0
- mapproxy/util/ext/dictspec/validator.py +194 -0
- mapproxy/util/ext/local.py +198 -0
- mapproxy/util/ext/lockfile.py +140 -0
- mapproxy/util/ext/odict.py +321 -0
- mapproxy/util/ext/serving.py +491 -0
- mapproxy/util/ext/tempita/__init__.py +1093 -0
- mapproxy/util/ext/tempita/_looper.py +163 -0
- mapproxy/util/ext/tempita/string_utils.py +24 -0
- mapproxy/util/ext/wmsparse/__init__.py +3 -0
- mapproxy/util/ext/wmsparse/duration.py +600 -0
- mapproxy/util/ext/wmsparse/parse.py +307 -0
- mapproxy/util/ext/wmsparse/test/__init__.py +0 -0
- mapproxy/util/ext/wmsparse/test/test_parse.py +111 -0
- mapproxy/util/ext/wmsparse/test/test_util.py +23 -0
- mapproxy/util/ext/wmsparse/test/wms-example-111.xml +90 -0
- mapproxy/util/ext/wmsparse/test/wms-example-130.xml +120 -0
- mapproxy/util/ext/wmsparse/test/wms-large-111.xml +2114 -0
- mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml +386 -0
- mapproxy/util/ext/wmsparse/util.py +189 -0
- mapproxy/util/fs.py +164 -0
- mapproxy/util/geom.py +307 -0
- mapproxy/util/lib.py +117 -0
- mapproxy/util/lock.py +171 -0
- mapproxy/util/ogr.py +247 -0
- mapproxy/util/py.py +75 -0
- mapproxy/util/times.py +78 -0
- mapproxy/util/yaml.py +58 -0
- mapproxy/version.py +33 -0
- mapproxy/wsgiapp.py +167 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# This file is part of the MapProxy project.
|
|
2
|
+
# Copyright (C) 2011 Omniscale <http://omniscale.de>
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
from __future__ import division
|
|
17
|
+
|
|
18
|
+
import pytest
|
|
19
|
+
|
|
20
|
+
from mapproxy.test.system import SysTest
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TestWMSBehindProxy(SysTest):
|
|
24
|
+
"""
|
|
25
|
+
Check WMS OnlineResources for requests behind HTTP proxies.
|
|
26
|
+
"""
|
|
27
|
+
@pytest.fixture(scope='class')
|
|
28
|
+
def config_file(self):
|
|
29
|
+
return 'layer.yaml'
|
|
30
|
+
|
|
31
|
+
def test_no_proxy(self, app):
|
|
32
|
+
resp = app.get('http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities'
|
|
33
|
+
'&VERSION=1.1.0')
|
|
34
|
+
assert '"http://localhost/service' in resp
|
|
35
|
+
|
|
36
|
+
def test_with_script_name(self, app):
|
|
37
|
+
resp = app.get('http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities'
|
|
38
|
+
'&VERSION=1.1.0', extra_environ={'HTTP_X_SCRIPT_NAME': '/foo'})
|
|
39
|
+
assert '"http://localhost/service' not in resp
|
|
40
|
+
assert '"http://localhost/foo/service' in resp
|
|
41
|
+
|
|
42
|
+
def test_with_host(self, app):
|
|
43
|
+
resp = app.get('http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities'
|
|
44
|
+
'&VERSION=1.1.0', extra_environ={'HTTP_HOST': 'example.org'})
|
|
45
|
+
assert '"http://localhost/service' not in resp
|
|
46
|
+
assert '"http://example.org/service' in resp
|
|
47
|
+
|
|
48
|
+
def test_with_host_and_script_name(self, app):
|
|
49
|
+
resp = app.get('http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities'
|
|
50
|
+
'&VERSION=1.1.0', extra_environ={'HTTP_X_SCRIPT_NAME': '/foo', 'HTTP_HOST': 'example.org'})
|
|
51
|
+
assert '"http://localhost/service' not in resp
|
|
52
|
+
assert '"http://example.org/foo/service' in resp
|
|
53
|
+
|
|
54
|
+
def test_with_forwarded_host(self, app):
|
|
55
|
+
resp = app.get('http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities'
|
|
56
|
+
'&VERSION=1.1.0', extra_environ={'HTTP_X_FORWARDED_HOST': 'example.org, bar.org'})
|
|
57
|
+
assert '"http://localhost/service' not in resp
|
|
58
|
+
assert '"http://example.org/service' in resp
|
|
59
|
+
|
|
60
|
+
def test_with_forwarded_host_and_script_name(self, app):
|
|
61
|
+
resp = app.get('http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities'
|
|
62
|
+
'&VERSION=1.1.0',
|
|
63
|
+
extra_environ={'HTTP_X_FORWARDED_HOST': 'example.org', 'HTTP_X_SCRIPT_NAME': '/foo'})
|
|
64
|
+
assert '"http://localhost/service' not in resp
|
|
65
|
+
assert '"http://example.org/foo/service' in resp
|
|
66
|
+
|
|
67
|
+
def test_with_forwarded_proto_and_script_name_and_host(self, app):
|
|
68
|
+
resp = app.get('http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities'
|
|
69
|
+
'&VERSION=1.1.0', extra_environ={
|
|
70
|
+
'HTTP_X_FORWARDED_PROTO': 'https',
|
|
71
|
+
'HTTP_X_SCRIPT_NAME': '/foo',
|
|
72
|
+
'HTTP_HOST': 'example.org:443'
|
|
73
|
+
})
|
|
74
|
+
assert '"http://localhost/service' not in resp
|
|
75
|
+
assert '"https://example.org/foo/service' in resp
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# This file is part of the MapProxy project.
|
|
2
|
+
# Copyright (C) 2016 Omniscale <http://omniscale.de>
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import pytest
|
|
17
|
+
|
|
18
|
+
from mapproxy.request.wms import WMS111MapRequest
|
|
19
|
+
from mapproxy.test.image import tmp_image
|
|
20
|
+
from mapproxy.test.http import mock_httpd
|
|
21
|
+
from mapproxy.test.system import SysTest
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@pytest.fixture(scope="module")
|
|
25
|
+
def config_file():
|
|
26
|
+
return "cache_bulk_meta_tiles.yaml"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class TestCacheSource(SysTest):
|
|
30
|
+
|
|
31
|
+
def test_tms_capabilities(self, app):
|
|
32
|
+
resp = app.get("/tms/1.0.0/")
|
|
33
|
+
xml = resp.lxml
|
|
34
|
+
|
|
35
|
+
assert xml.xpath("count(//TileMap)") == 1
|
|
36
|
+
|
|
37
|
+
def test_get_map(self, app):
|
|
38
|
+
# request single tile via WMS and check that
|
|
39
|
+
map_req = WMS111MapRequest(
|
|
40
|
+
url="/service?",
|
|
41
|
+
param=dict(
|
|
42
|
+
service="WMS",
|
|
43
|
+
version="1.1.1",
|
|
44
|
+
width="100",
|
|
45
|
+
height="100",
|
|
46
|
+
bbox="0,0,100000,100000",
|
|
47
|
+
layers="bulk",
|
|
48
|
+
srs="EPSG:3857",
|
|
49
|
+
format="image/png",
|
|
50
|
+
styles="",
|
|
51
|
+
request="GetMap",
|
|
52
|
+
),
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
expected_reqs = []
|
|
56
|
+
with tmp_image((256, 256), format="jpeg") as img:
|
|
57
|
+
img = img.read()
|
|
58
|
+
# bulk_cache has meta_size of [2, 2]
|
|
59
|
+
for tile in [(128, 128, 8), (128, 129, 8), (129, 128, 8), (129, 129, 8)]:
|
|
60
|
+
expected_reqs.append(
|
|
61
|
+
(
|
|
62
|
+
{
|
|
63
|
+
"path": r"/tiles/%02d/000/000/%03d/000/000/%03d.png"
|
|
64
|
+
% (tile[2], tile[0], tile[1])
|
|
65
|
+
},
|
|
66
|
+
{"body": img, "headers": {"content-type": "image/png"}},
|
|
67
|
+
)
|
|
68
|
+
)
|
|
69
|
+
with mock_httpd(("localhost", 42423), expected_reqs, unordered=True):
|
|
70
|
+
resp = app.get(map_req)
|
|
71
|
+
assert resp.content_type == "image/png"
|
|
72
|
+
|
|
73
|
+
def test_get_tile(self, app, cache_dir):
|
|
74
|
+
expected_reqs = []
|
|
75
|
+
with tmp_image((256, 256), format="jpeg") as img:
|
|
76
|
+
# bulk_cache has meta_size of [2, 2]
|
|
77
|
+
for tile in [(4, 3, 5), (5, 3, 5), (4, 2, 5), (5, 2, 5)]:
|
|
78
|
+
expected_reqs.append(
|
|
79
|
+
(
|
|
80
|
+
{
|
|
81
|
+
"path": r"/tiles/%02d/000/000/%03d/000/000/%03d.png"
|
|
82
|
+
% (tile[2], tile[0], tile[1])
|
|
83
|
+
},
|
|
84
|
+
{"body": img.read(), "headers": {"content-type": "image/png"}},
|
|
85
|
+
)
|
|
86
|
+
)
|
|
87
|
+
with mock_httpd(("localhost", 42423), expected_reqs, unordered=True):
|
|
88
|
+
resp = app.get("/tiles/1.0.0/bulk/EPSG900913/5/4/3.png")
|
|
89
|
+
assert resp.content_type == "image/png"
|
|
90
|
+
|
|
91
|
+
assert cache_dir.join(
|
|
92
|
+
"bulk_cache_EPSG900913/05/000/000/004/000/000/002.png"
|
|
93
|
+
).check()
|
|
94
|
+
assert cache_dir.join(
|
|
95
|
+
"bulk_cache_EPSG900913/05/000/000/004/000/000/003.png"
|
|
96
|
+
).check()
|
|
97
|
+
assert cache_dir.join(
|
|
98
|
+
"bulk_cache_EPSG900913/05/000/000/005/000/000/002.png"
|
|
99
|
+
).check()
|
|
100
|
+
assert cache_dir.join(
|
|
101
|
+
"bulk_cache_EPSG900913/05/000/000/005/000/000/003.png"
|
|
102
|
+
).check()
|
|
103
|
+
|
|
104
|
+
# access tile cached by previous bulk_meta_tile request
|
|
105
|
+
resp = app.get("/tiles/1.0.0/bulk/EPSG900913/5/5/3.png")
|
|
106
|
+
assert resp.content_type == "image/png"
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# This file is part of the MapProxy project.
|
|
2
|
+
# Copyright (C) 2022 Omniscale <http://omniscale.de>
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
from __future__ import division
|
|
17
|
+
|
|
18
|
+
import os
|
|
19
|
+
from io import BytesIO
|
|
20
|
+
|
|
21
|
+
import pytest
|
|
22
|
+
|
|
23
|
+
from mapproxy.request.wms import WMS111MapRequest
|
|
24
|
+
from mapproxy.test.image import is_png, create_tmp_image
|
|
25
|
+
from mapproxy.test.system import SysTest
|
|
26
|
+
|
|
27
|
+
try:
|
|
28
|
+
from mapproxy.cache.azureblob import AzureBlobCache
|
|
29
|
+
except ImportError:
|
|
30
|
+
AzureBlobCache = None
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def azureblob_connection():
|
|
34
|
+
# Use default storage account of Azurite emulator
|
|
35
|
+
host = os.environ['MAPPROXY_TEST_AZURE_BLOB']
|
|
36
|
+
return 'DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=' \
|
|
37
|
+
'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr' \
|
|
38
|
+
'/KBHBeksoGMGw==;BlobEndpoint=' + host + '/devstoreaccount1;'
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def azure_container_client(connection_string, container_name):
|
|
42
|
+
return AzureBlobCache(
|
|
43
|
+
base_path="",
|
|
44
|
+
file_ext="",
|
|
45
|
+
connection_string=connection_string,
|
|
46
|
+
container_name=container_name).container_client
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@pytest.fixture(scope="module")
|
|
50
|
+
def config_file():
|
|
51
|
+
return "cache_azureblob.yaml"
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@pytest.fixture(scope="module")
|
|
55
|
+
def azureblob_containers():
|
|
56
|
+
container = azure_container_client(azureblob_connection(), 'default-container')
|
|
57
|
+
if not container.exists():
|
|
58
|
+
container.create_container()
|
|
59
|
+
container = azure_container_client(azureblob_connection(), 'tiles')
|
|
60
|
+
if not container.exists():
|
|
61
|
+
container.create_container()
|
|
62
|
+
|
|
63
|
+
yield
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@pytest.mark.skipif(not AzureBlobCache or not os.environ.get('MAPPROXY_TEST_AZURE_BLOB'),
|
|
67
|
+
reason="azure-storage-blob package and MAPPROXY_TEST_AZURE_BLOB env required")
|
|
68
|
+
@pytest.mark.usefixtures("azureblob_containers")
|
|
69
|
+
class TestAzureBlobCache(SysTest):
|
|
70
|
+
|
|
71
|
+
def setup_method(self):
|
|
72
|
+
self.common_map_req = WMS111MapRequest(
|
|
73
|
+
url="/service?",
|
|
74
|
+
param=dict(
|
|
75
|
+
service="WMS",
|
|
76
|
+
version="1.1.1",
|
|
77
|
+
bbox="-150,-40,-140,-30",
|
|
78
|
+
width="100",
|
|
79
|
+
height="100",
|
|
80
|
+
layers="default",
|
|
81
|
+
srs="EPSG:4326",
|
|
82
|
+
format="image/png",
|
|
83
|
+
styles="",
|
|
84
|
+
request="GetMap",
|
|
85
|
+
),
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
def test_get_map_cached(self, app):
|
|
89
|
+
tile = create_tmp_image((256, 256))
|
|
90
|
+
container = azure_container_client(azureblob_connection(), 'default-container')
|
|
91
|
+
container.upload_blob(
|
|
92
|
+
name="default_cache/WebMerc/4/1/9.png",
|
|
93
|
+
data=BytesIO(tile),
|
|
94
|
+
overwrite=True
|
|
95
|
+
)
|
|
96
|
+
resp = app.get(self.common_map_req)
|
|
97
|
+
assert resp.content_type == "image/png"
|
|
98
|
+
data = BytesIO(resp.body)
|
|
99
|
+
assert is_png(data)
|
|
100
|
+
|
|
101
|
+
def test_get_map_cached_quadkey(self, app):
|
|
102
|
+
tile = create_tmp_image((256, 256))
|
|
103
|
+
container = azure_container_client(azureblob_connection(), 'tiles')
|
|
104
|
+
container.upload_blob(
|
|
105
|
+
name="quadkeytiles/2003.png",
|
|
106
|
+
data=BytesIO(tile),
|
|
107
|
+
overwrite=True
|
|
108
|
+
)
|
|
109
|
+
self.common_map_req.params.layers = "quadkey"
|
|
110
|
+
resp = app.get(self.common_map_req)
|
|
111
|
+
assert resp.content_type == "image/png"
|
|
112
|
+
data = BytesIO(resp.body)
|
|
113
|
+
assert is_png(data)
|
|
114
|
+
|
|
115
|
+
def test_get_map_cached_reverse_tms(self, app):
|
|
116
|
+
tile = create_tmp_image((256, 256))
|
|
117
|
+
container = azure_container_client(azureblob_connection(), 'tiles')
|
|
118
|
+
container.upload_blob(
|
|
119
|
+
name="reversetiles/9/1/4.png",
|
|
120
|
+
data=BytesIO(tile),
|
|
121
|
+
overwrite=True
|
|
122
|
+
)
|
|
123
|
+
self.common_map_req.params.layers = "reverse"
|
|
124
|
+
resp = app.get(self.common_map_req)
|
|
125
|
+
assert resp.content_type == "image/png"
|
|
126
|
+
data = BytesIO(resp.body)
|
|
127
|
+
assert is_png(data)
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# This file is part of the MapProxy project.
|
|
2
|
+
# Copyright (C) 2016 Omniscale <http://omniscale.de>
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import pytest
|
|
17
|
+
|
|
18
|
+
from mapproxy.request.wms import WMS111MapRequest
|
|
19
|
+
from mapproxy.request.wmts import WMTS100CapabilitiesRequest
|
|
20
|
+
from mapproxy.test.image import img_from_buf
|
|
21
|
+
from mapproxy.test.system import SysTest
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@pytest.fixture(scope="module")
|
|
25
|
+
def config_file():
|
|
26
|
+
return "cache_band_merge.yaml"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@pytest.mark.usefixtures("fixture_cache_data")
|
|
30
|
+
class TestCacheSource(SysTest):
|
|
31
|
+
|
|
32
|
+
# test various band merge configurations with
|
|
33
|
+
# cached base tile 0/0/0.png (R: 50 G: 100 B: 200)
|
|
34
|
+
|
|
35
|
+
def setup_method(self):
|
|
36
|
+
self.common_cap_req = WMTS100CapabilitiesRequest(
|
|
37
|
+
url="/service?",
|
|
38
|
+
param=dict(service="WMTS", version="1.0.0", request="GetCapabilities"),
|
|
39
|
+
)
|
|
40
|
+
self.common_map_req = WMS111MapRequest(
|
|
41
|
+
url="/service?",
|
|
42
|
+
param=dict(
|
|
43
|
+
service="WMS",
|
|
44
|
+
version="1.1.1",
|
|
45
|
+
bbox="-180,0,0,80",
|
|
46
|
+
width="100",
|
|
47
|
+
height="100",
|
|
48
|
+
layers="dop_l",
|
|
49
|
+
srs="EPSG:4326",
|
|
50
|
+
format="image/png",
|
|
51
|
+
styles="",
|
|
52
|
+
request="GetMap",
|
|
53
|
+
),
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def test_capabilities(self, app):
|
|
57
|
+
req = str(self.common_cap_req)
|
|
58
|
+
resp = app.get(req)
|
|
59
|
+
assert resp.content_type == "application/xml"
|
|
60
|
+
|
|
61
|
+
def test_get_tile_021(self, app):
|
|
62
|
+
resp = app.get("/wmts/dop_021/GLOBAL_WEBMERCATOR/0/0/0.png")
|
|
63
|
+
assert resp.content_type == "image/png"
|
|
64
|
+
img = img_from_buf(resp.body)
|
|
65
|
+
assert img.mode == "RGB"
|
|
66
|
+
assert img.getpixel((0, 0)) == (50, 200, 100)
|
|
67
|
+
|
|
68
|
+
def test_get_tile_l(self, app):
|
|
69
|
+
resp = app.get("/wmts/dop_l/GLOBAL_WEBMERCATOR/0/0/0.png")
|
|
70
|
+
assert resp.content_type == "image/png"
|
|
71
|
+
img = img_from_buf(resp.body)
|
|
72
|
+
assert img.mode == "L"
|
|
73
|
+
assert img.getpixel((0, 0)) == int(50 * 0.25 + 0.7 * 100 + 0.05 * 200)
|
|
74
|
+
|
|
75
|
+
def test_get_tile_0(self, app):
|
|
76
|
+
resp = app.get("/wmts/dop_0/GLOBAL_WEBMERCATOR/0/0/0.png")
|
|
77
|
+
assert resp.content_type == "image/png"
|
|
78
|
+
img = img_from_buf(resp.body)
|
|
79
|
+
assert img.mode == "RGB" # forced with image.mode
|
|
80
|
+
assert img.getpixel((0, 0)) == (50, 50, 50)
|
|
81
|
+
|
|
82
|
+
def test_get_tile_0122(self, app):
|
|
83
|
+
resp = app.get("/wmts/dop_0122/GLOBAL_WEBMERCATOR/0/0/0.png")
|
|
84
|
+
assert resp.content_type == "image/png"
|
|
85
|
+
img = img_from_buf(resp.body)
|
|
86
|
+
assert img.mode == "RGBA"
|
|
87
|
+
assert img.getpixel((0, 0)) == (50, 100, 200, 50)
|
|
88
|
+
|
|
89
|
+
def test_get_map_l(self, app):
|
|
90
|
+
resp = app.get(str(self.common_map_req))
|
|
91
|
+
assert resp.content_type == "image/png"
|
|
92
|
+
img = img_from_buf(resp.body)
|
|
93
|
+
assert img.mode == "L"
|
|
94
|
+
assert img.getpixel((0, 0)) == int(50 * 0.25 + 0.7 * 100 + 0.05 * 200)
|
|
95
|
+
|
|
96
|
+
def test_get_map_l_jpeg(self, app):
|
|
97
|
+
self.common_map_req.params.format = "image/jpeg"
|
|
98
|
+
resp = app.get(str(self.common_map_req))
|
|
99
|
+
assert resp.content_type == "image/jpeg"
|
|
100
|
+
img = img_from_buf(resp.body)
|
|
101
|
+
assert img.mode == "RGB"
|
|
102
|
+
# L converted to RGB for jpeg
|
|
103
|
+
assert img.getpixel((0, 0)) == (92, 92, 92)
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# -:- encoding: utf8 -:-
|
|
2
|
+
# This file is part of the MapProxy project.
|
|
3
|
+
# Copyright (C) 2015 Omniscale <http://omniscale.de>
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
from __future__ import division
|
|
18
|
+
|
|
19
|
+
import pytest
|
|
20
|
+
|
|
21
|
+
from mapproxy.request.wmts import WMTS100CapabilitiesRequest
|
|
22
|
+
from mapproxy.request.wms import WMS111CapabilitiesRequest
|
|
23
|
+
from mapproxy.test.helper import validate_with_xsd
|
|
24
|
+
from mapproxy.test.system import SysTest
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# From: https://www.kaggle.com/datasets/chapagain/country-state-geo-location
|
|
28
|
+
boundary_geojson = (
|
|
29
|
+
b"""
|
|
30
|
+
{"type":"FeatureCollection","features":[
|
|
31
|
+
{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-155.54211,19.08348],[-155.68817,18.91619],[-155.93665,19.05939],[-155.90806,19.33888],[-156.07347,19.70294],[-156.02368,19.81422],[-155.85008,19.97729],[-155.91907,20.17395],[-155.86108,20.26721],[-155.78505,20.2487],[-155.40214,20.07975],[-155.22452,19.99302],[-155.06226,19.8591],[-154.80741,19.50871],[-154.83147,19.45328],[-155.22217,19.23972],[-155.54211,19.08348]]],[[[-156.07926,20.64397],[-156.41445,20.57241],[-156.58673,20.783],[-156.70167,20.8643],[-156.71055,20.92676],[-156.61258,21.01249],[-156.25711,20.91745],[-155.99566,20.76404],[-156.07926,20.64397]]],[[[-156.75824,21.17684],[-156.78933,21.06873],[-157.32521,21.09777],[-157.25027,21.21958],[-156.75824,21.17684]]],[[[-157.65283,21.32217],[-157.70703,21.26442],[-157.7786,21.27729],[-158.12667,21.31244],[-158.2538,21.53919],[-158.29265,21.57912],[-158.0252,21.71696],[-157.94161,21.65272],[-157.65283,21.32217]]],[[[-159.34512,21.982],[-159.46372,21.88299],[-159.80051,22.06533],[-159.74877,22.1382],[-159.5962,22.23618],[-159.36569,22.21494],[-159.34512,21.982]]],[[[-94.81758,49.38905],[-94.64,48.84],[-94.32914,48.67074],[-93.63087,48.60926],[-92.61,48.45],[-91.64,48.14],[-90.83,48.27],[-89.6,48.01],[-89.272917,48.019808],[-88.378114,48.302918],[-87.439793,47.94],[-86.461991,47.553338],[-85.652363,47.220219],[-84.87608,46.900083],[-84.779238,46.637102],[-84.543749,46.538684],[-84.6049,46.4396],[-84.3367,46.40877],[-84.14212,46.512226],[-84.091851,46.275419],[-83.890765,46.116927],[-83.616131,46.116927],[-83.469551,45.994686],[-83.592851,45.816894],[-82.550925,45.347517],[-82.337763,44.44],[-82.137642,43.571088],[-82.43,42.98],[-82.9,42.43],[-83.12,42.08],[-83.142,41.975681],[-83.02981,41.832796],[-82.690089,41.675105],[-82.439278,41.675105],[-81.277747,42.209026],[-80.247448,42.3662],[-78.939362,42.863611],[-78.92,42.965],[-79.01,43.27],[-79.171674,43.466339],[-78.72028,43.625089],[-77.737885,43.629056],[-76.820034,43.628784],[-76.5,44.018459],[-76.375,44.09631],[-75.31821,44.81645],[-74.867,45.00048],[-73.34783,45.00738],[-71.50506,45.0082],[-71.405,45.255],[-71.08482,45.30524],[-70.66,45.46],[-70.305,45.915],[-69.99997,46.69307],[-69.237216,47.447781],[-68.905,47.185],[-68.23444,47.35486],[-67.79046,47.06636],[-67.79134,45.70281],[-67.13741,45.13753],[-66.96466,44.8097],[-68.03252,44.3252],[-69.06,43.98],[-70.11617,43.68405],[-70.645476,43.090238],[-70.81489,42.8653],[-70.825,42.335],[-70.495,41.805],[-70.08,41.78],[-70.185,42.145],[-69.88497,41.92283],[-69.96503,41.63717],[-70.64,41.475],[-71.12039,41.49445],[-71.86,41.32],[-72.295,41.27],[-72.87643,41.22065],[-73.71,40.931102],[-72.24126,41.11948],[-71.945,40.93],[-73.345,40.63],[-73.982,40.628],[-73.952325,40.75075],[-74.25671,40.47351],[-73.96244,40.42763],[-74.17838,39.70926],[-74.90604,38.93954],[-74.98041,39.1964],[-75.20002,39.24845],[-75.52805,39.4985],[-75.32,38.96],[-75.071835,38.782032],[-75.05673,38.40412],[-75.37747,38.01551],[-75.94023,37.21689],[-76.03127,37.2566],[-75.72205,37.93705],[-76.23287,38.319215],[-76.35,39.15],[-76.542725,38.717615],[-76.32933,38.08326],[-76.989998,38.239992],[-76.30162,37.917945],[-76.25874,36.9664],[-75.9718,36.89726],[-75.86804,36.55125],[-75.72749,35.55074],[-76.36318,34.80854],[-77.397635,34.51201],[-78.05496,33.92547],[-78.55435,33.86133],[-79.06067,33.49395],[-79.20357,33.15839],[-80.301325,32.509355],[-80.86498,32.0333],[-81.33629,31.44049],[-81.49042,30.72999],[-81.31371,30.03552],[-80.98,29.18],[-80.535585,28.47213],[-80.53,28.04],[-80.056539,26.88],[-80.088015,26.205765],[-80.13156,25.816775],[-80.38103,25.20616],[-80.68,25.08],[-81.17213,25.20126],[-81.33,25.64],[-81.71,25.87],[-82.24,26.73],[-82.70515,27.49504],[-82.85526,27.88624],[-82.65,28.55],[-82.93,29.1],[-83.70959,29.93656],[-84.1,30.09],[-85.10882,29.63615],[-85.28784,29.68612],[-85.7731,30.15261],[-86.4,30.4],[-87.53036,30.27433],[-88.41782,30.3849],[-89.18049,30.31598],[-89.593831,30.159994],[-89.413735,29.89419],[-89.43,29.48864],[-89.21767,29.29108],[-89.40823,29.15961],[-89.77928,29.30714],[-90.15463,29.11743],[-90.880225,29.148535],[-91.626785,29.677],[-92.49906,29.5523],[-93.22637,29.78375],[-93.84842,29.71363],[-94.69,29.48],[-95.60026,28.73863],[-96.59404,28.30748],[-97.14,27.83],[-97.37,27.38],[-97.38,26.69],[-97.33,26.21],[-97.14,25.87],[-97.53,25.84],[-98.24,26.06],[-99.02,26.37],[-99.3,26.84],[-99.52,27.54],[-100.11,28.11],[-100.45584,28.69612],[-100.9576,29.38071],[-101.6624,29.7793],[-102.48,29.76],[-103.11,28.97],[-103.94,29.27],[-104.45697,29.57196],[-104.70575,30.12173],[-105.03737,30.64402],[-105.63159,31.08383],[-106.1429,31.39995],[-106.50759,31.75452],[-108.24,31.754854],[-108.24194,31.34222],[-109.035,31.34194],[-111.02361,31.33472],[-113.30498,32.03914],[-114.815,32.52528],[-114.72139,32.72083],[-115.99135,32.61239],[-117.12776,32.53534],[-117.295938,33.046225],[-117.944,33.621236],[-118.410602,33.740909],[-118.519895,34.027782],[-119.081,34.078],[-119.438841,34.348477],[-120.36778,34.44711],[-120.62286,34.60855],[-120.74433,35.15686],[-121.71457,36.16153],[-122.54747,37.55176],[-122.51201,37.78339],[-122.95319,38.11371],[-123.7272,38.95166],[-123.86517,39.76699],[-124.39807,40.3132],[-124.17886,41.14202],[-124.2137,41.99964],[-124.53284,42.76599],[-124.14214,43.70838],[-124.020535,44.615895],[-123.89893,45.52341],[-124.079635,46.86475],[-124.39567,47.72017],[-124.68721,48.184433],[-124.566101,48.379715],[-123.12,48.04],[-122.58736,47.096],[-122.34,47.36],[-122.5,48.18],[-122.84,49],[-120,49],[-117.03121,49],[-116.04818,49],[-113,49],[-110.05,49],[-107.05,49],[-104.04826,48.99986],[-100.65,49],[-97.22872,49.0007],[-95.15907,49],[-95.15609,49.38425],[-94.81758,49.38905]]],[[[-153.006314,57.115842],[-154.00509,56.734677],[-154.516403,56.992749],[-154.670993,57.461196],[-153.76278,57.816575],[-153.228729,57.968968],[-152.564791,57.901427],[-152.141147,57.591059],[-153.006314,57.115842]]],[[[-165.579164,59.909987],[-166.19277,59.754441],[-166.848337,59.941406],[-167.455277,60.213069],[-166.467792,60.38417],[-165.67443,60.293607],[-165.579164,59.909987]]],[[[-171.731657,63.782515],[-171.114434,63.592191],[-170.491112,63.694975],[-169.682505,63.431116],[-168.689439,63.297506],[-168.771941,63.188598],[-169.52944,62.976931],[-170.290556,63.194438],[-170.671386,63.375822],[-171.553063,63.317789],[-171.791111,63.405846],[-171.731657,63.782515]]],[[[-155.06779,71.147776],[-154.344165,70.696409],[-153.900006,70.889989],[-152.210006,70.829992],[-152.270002,70.600006],[-150.739992,70.430017],[-149.720003,70.53001],[-147.613362,70.214035],[-145.68999,70.12001],[-144.920011,69.989992],[-143.589446,70.152514],[-142.07251,69.851938],[-140.985988,69.711998],[-140.992499,66.000029],[-140.99777,60.306397],[-140.012998,60.276838],[-139.039,60.000007],[-138.34089,59.56211],[-137.4525,58.905],[-136.47972,59.46389],[-135.47583,59.78778],[-134.945,59.27056],[-134.27111,58.86111],[-133.355549,58.410285],[-132.73042,57.69289],[-131.70781,56.55212],[-130.00778,55.91583],[-129.979994,55.284998],[-130.53611,54.802753],[-131.085818,55.178906],[-131.967211,55.497776],[-132.250011,56.369996],[-133.539181,57.178887],[-134.078063,58.123068],[-135.038211,58.187715],[-136.628062,58.212209],[-137.800006,58.499995],[-139.867787,59.537762],[-140.825274,59.727517],[-142.574444,60.084447],[-143.958881,59.99918],[-145.925557,60.45861],[-147.114374,60.884656],[-148.224306,60.672989],[-148.018066,59.978329],[-148.570823,59.914173],[-149.727858,59.705658],[-150.608243,59.368211],[-151.716393,59.155821],[-151.859433,59.744984],[-151.409719,60.725803],[-150.346941,61.033588],[-150.621111,61.284425],[-151.895839,60.727198],[-152.57833,60.061657],[-154.019172,59.350279],[-153.287511,58.864728],[-154.232492,58.146374],[-155.307491,57.727795],[-156.308335,57.422774],[-156.556097,56.979985],[-158.117217,56.463608],[-158.433321,55.994154],[-159.603327,55.566686],[-160.28972,55.643581],[-161.223048,55.364735],[-162.237766,55.024187],[-163.069447,54.689737],[-164.785569,54.404173],[-164.942226,54.572225],[-163.84834,55.039431],[-162.870001,55.348043],[-161.804175,55.894986],[-160.563605,56.008055],[-160.07056,56.418055],[-158.684443,57.016675],[-158.461097,57.216921],[-157.72277,57.570001],[-157.550274,58.328326],[-157.041675,58.918885],[-158.194731,58.615802],[-158.517218,58.787781],[-159.058606,58.424186],[-159.711667,58.93139],[-159.981289,58.572549],[-160.355271,59.071123],[-161.355003,58.670838],[-161.968894,58.671665],[-162.054987,59.266925],[-161.874171,59.633621],[-162.518059,59.989724],[-163.818341,59.798056],[-164.662218,60.267484],[-165.346388,60.507496],[-165.350832,61.073895],[-166.121379,61.500019],[-165.734452,62.074997],[-164.919179,62.633076],[-164.562508,63.146378],[-163.753332,63.219449],[-163.067224,63.059459],[-162.260555,63.541936],[-161.53445,63.455817],[-160.772507,63.766108],[-160.958335,64.222799],[-161.518068,64.402788],[-160.777778,64.788604],[-161.391926,64.777235],[-162.45305,64.559445],[-162.757786,64.338605],[-163.546394,64.55916],[-164.96083,64.446945],[-166.425288,64.686672],[-166.845004,65.088896],[-168.11056,65.669997],[-166.705271,66.088318],[-164.47471,66.57666],[-163.652512,66.57666],[-163.788602,66.077207],[-161.677774,66.11612],[-162.489715,66.735565],[-163.719717,67.116395],[-164.430991,67.616338],[-165.390287,68.042772],[-166.764441,68.358877],[-166.204707,68.883031],[-164.430811,68.915535],[-163.168614,69.371115],[-162.930566,69.858062],[-161.908897,70.33333],[-160.934797,70.44769],[-159.039176,70.891642],[-158.119723,70.824721],[-156.580825,71.357764],[-155.06779,71.147776]]]]}}
|
|
32
|
+
]}
|
|
33
|
+
""".strip()
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
bbox_geojson = (
|
|
38
|
+
b"""
|
|
39
|
+
{"type":"FeatureCollection","features":[
|
|
40
|
+
{
|
|
41
|
+
"type": "Feature",
|
|
42
|
+
"properties": {},
|
|
43
|
+
"geometry": {
|
|
44
|
+
"coordinates": [
|
|
45
|
+
[
|
|
46
|
+
[
|
|
47
|
+
-63.56007379633115,
|
|
48
|
+
29.28415663402984
|
|
49
|
+
],
|
|
50
|
+
[
|
|
51
|
+
-85.19852788496041,
|
|
52
|
+
36.17088587412222
|
|
53
|
+
],
|
|
54
|
+
[
|
|
55
|
+
-85.91055751613112,
|
|
56
|
+
24.072232084660257
|
|
57
|
+
],
|
|
58
|
+
[
|
|
59
|
+
-66.13007334822726,
|
|
60
|
+
20.3965768925829
|
|
61
|
+
],
|
|
62
|
+
[
|
|
63
|
+
-63.56007379633115,
|
|
64
|
+
29.28415663402984
|
|
65
|
+
]
|
|
66
|
+
]
|
|
67
|
+
],
|
|
68
|
+
"type": "Polygon"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
]}
|
|
72
|
+
""".strip()
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@pytest.fixture(scope="module")
|
|
77
|
+
def config_file():
|
|
78
|
+
return "cache_coverage.yaml"
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
ns_wmts = {
|
|
82
|
+
"wmts": "http://www.opengis.net/wmts/1.0",
|
|
83
|
+
"ows": "http://www.opengis.net/ows/1.1",
|
|
84
|
+
"xlink": "http://www.w3.org/1999/xlink",
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class TestCacheCoverage(SysTest):
|
|
89
|
+
@pytest.fixture(scope="class")
|
|
90
|
+
def additional_files(self, base_dir):
|
|
91
|
+
base_dir.join("boundary.geojson").write_binary(boundary_geojson)
|
|
92
|
+
base_dir.join("bbox.geojson").write_binary(bbox_geojson)
|
|
93
|
+
|
|
94
|
+
def setup_method(self):
|
|
95
|
+
self.common_cap_req = WMTS100CapabilitiesRequest(
|
|
96
|
+
url="/service?",
|
|
97
|
+
param=dict(service="WMTS", version="1.0.0", request="GetCapabilities"),
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
def test_tms_capabilities_coverage(self, app):
|
|
101
|
+
resp = app.get("/tms/1.0.0/")
|
|
102
|
+
assert "http://localhost/tms/1.0.0/bbox_coverage_cache/EPSG4326" in resp
|
|
103
|
+
assert "http://localhost/tms/1.0.0/intersection_coverage_cache/EPSG4326" in resp
|
|
104
|
+
assert "http://localhost/tms/1.0.0/datasource_coverage_cache/EPSG4326" in resp
|
|
105
|
+
xml = resp.lxml
|
|
106
|
+
assert xml.xpath("count(//TileMap)") == 3
|
|
107
|
+
|
|
108
|
+
# bbox coverage
|
|
109
|
+
resp = app.get("/tms/1.0.0/bbox_coverage_cache/EPSG4326")
|
|
110
|
+
xml = resp.lxml
|
|
111
|
+
|
|
112
|
+
assert xml.xpath("//TileMap/BoundingBox/@minx") == ["-50"]
|
|
113
|
+
assert xml.xpath("//TileMap/BoundingBox/@miny") == ["-50"]
|
|
114
|
+
assert xml.xpath("//TileMap/BoundingBox/@maxx") == ["50"]
|
|
115
|
+
assert xml.xpath("//TileMap/BoundingBox/@maxy") == ["50"]
|
|
116
|
+
|
|
117
|
+
# intersection coverage
|
|
118
|
+
resp = app.get("/tms/1.0.0/intersection_coverage_cache/EPSG4326")
|
|
119
|
+
xml = resp.lxml
|
|
120
|
+
|
|
121
|
+
assert xml.xpath("//TileMap/BoundingBox/@minx") == ["-48.0"]
|
|
122
|
+
assert xml.xpath("//TileMap/BoundingBox/@miny") == ["-56.0"]
|
|
123
|
+
assert xml.xpath("//TileMap/BoundingBox/@maxx") == ["51.0"]
|
|
124
|
+
assert xml.xpath("//TileMap/BoundingBox/@maxy") == ["58.0"]
|
|
125
|
+
|
|
126
|
+
# datasource coverage
|
|
127
|
+
resp = app.get("/tms/1.0.0/datasource_coverage_cache/EPSG4326")
|
|
128
|
+
xml = resp.lxml
|
|
129
|
+
|
|
130
|
+
assert xml.xpath("//TileMap/BoundingBox/@minx") == ["-85.56451604106776"]
|
|
131
|
+
assert xml.xpath("//TileMap/BoundingBox/@miny") == ["25.08"]
|
|
132
|
+
assert xml.xpath("//TileMap/BoundingBox/@maxx") == ["-78.11791218081675"]
|
|
133
|
+
assert xml.xpath("//TileMap/BoundingBox/@maxy") == ["36.17088587412222"]
|
|
134
|
+
|
|
135
|
+
def test_wmts_capabilities_coverage(self, app):
|
|
136
|
+
req = str(self.common_cap_req)
|
|
137
|
+
resp = app.get(req)
|
|
138
|
+
assert resp.content_type == "application/xml"
|
|
139
|
+
xml = resp.lxml
|
|
140
|
+
|
|
141
|
+
assert validate_with_xsd(
|
|
142
|
+
xml, xsd_name="wmts/1.0/wmtsGetCapabilities_response.xsd"
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
assert set(
|
|
146
|
+
xml.xpath(
|
|
147
|
+
"//wmts:Contents/wmts:Layer/ows:WGS84BoundingBox/ows:LowerCorner/text()",
|
|
148
|
+
namespaces=ns_wmts,
|
|
149
|
+
)
|
|
150
|
+
) == set(["-48.0 -56.0", "-85.56451604106776 25.08", "-50 -50"])
|
|
151
|
+
|
|
152
|
+
assert set(
|
|
153
|
+
xml.xpath(
|
|
154
|
+
"//wmts:Contents/wmts:Layer/ows:WGS84BoundingBox/ows:UpperCorner/text()",
|
|
155
|
+
namespaces=ns_wmts,
|
|
156
|
+
)
|
|
157
|
+
) == set(["51.0 58.0", "-78.11791218081675 36.17088587412222", "50 50"])
|
|
158
|
+
|
|
159
|
+
def test_wms_capabilities_coverage(self, app):
|
|
160
|
+
req = WMS111CapabilitiesRequest(url="/service?")
|
|
161
|
+
resp = app.get(req)
|
|
162
|
+
assert resp.content_type == "application/vnd.ogc.wms_xml"
|
|
163
|
+
xml = resp.lxml
|
|
164
|
+
|
|
165
|
+
assert xml.xpath("//Layer/Layer/LatLonBoundingBox/@minx") == ["-50", "-48.0", "-85.56451604106776"]
|
|
166
|
+
assert xml.xpath("//Layer/Layer/LatLonBoundingBox/@miny") == ["-50", "-56.0", "25.08"]
|
|
167
|
+
assert xml.xpath("//Layer/Layer/LatLonBoundingBox/@maxx") == ["50", "51.0", "-78.11791218081675"]
|
|
168
|
+
assert xml.xpath("//Layer/Layer/LatLonBoundingBox/@maxy") == ["50", "58.0", "36.17088587412222"]
|