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,427 @@
|
|
|
1
|
+
# This file is part of the MapProxy project.
|
|
2
|
+
# Copyright (C) 2015 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 print_function
|
|
17
|
+
|
|
18
|
+
import yaml
|
|
19
|
+
|
|
20
|
+
from mapproxy.config.validator import validate
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TestValidator(object):
|
|
24
|
+
def _test_conf(self, yaml_part=None):
|
|
25
|
+
base = yaml.safe_load('''
|
|
26
|
+
services:
|
|
27
|
+
wms:
|
|
28
|
+
md:
|
|
29
|
+
title: MapProxy
|
|
30
|
+
layers:
|
|
31
|
+
- name: one
|
|
32
|
+
title: One
|
|
33
|
+
sources: [one_cache]
|
|
34
|
+
caches:
|
|
35
|
+
one_cache:
|
|
36
|
+
grids: [GLOBAL_MERCATOR]
|
|
37
|
+
sources: [one_source]
|
|
38
|
+
sources:
|
|
39
|
+
one_source:
|
|
40
|
+
type: wms
|
|
41
|
+
req:
|
|
42
|
+
url: http://localhost/service?
|
|
43
|
+
layers: one
|
|
44
|
+
''')
|
|
45
|
+
if yaml_part is not None:
|
|
46
|
+
base.update(yaml.safe_load(yaml_part))
|
|
47
|
+
return base
|
|
48
|
+
|
|
49
|
+
def test_valid_config(self):
|
|
50
|
+
conf = self._test_conf()
|
|
51
|
+
|
|
52
|
+
errors = validate(conf)
|
|
53
|
+
assert errors == []
|
|
54
|
+
|
|
55
|
+
def test_missing_layer_source(self):
|
|
56
|
+
conf = self._test_conf()
|
|
57
|
+
del conf['caches']['one_cache']
|
|
58
|
+
|
|
59
|
+
errors = validate(conf)
|
|
60
|
+
assert errors == [
|
|
61
|
+
"Source 'one_cache' for layer 'one' not in cache or source section"
|
|
62
|
+
]
|
|
63
|
+
|
|
64
|
+
def test_multiple_errors(self):
|
|
65
|
+
conf = self._test_conf()
|
|
66
|
+
del conf['caches']['one_cache']
|
|
67
|
+
del conf['services']
|
|
68
|
+
errors = validate(conf)
|
|
69
|
+
assert errors == [
|
|
70
|
+
"'services' is a required property in root",
|
|
71
|
+
"Source 'one_cache' for layer 'one' not in cache or source section",
|
|
72
|
+
]
|
|
73
|
+
|
|
74
|
+
def test_empty_layer_sources(self):
|
|
75
|
+
conf = self._test_conf('''
|
|
76
|
+
layers:
|
|
77
|
+
- name: one
|
|
78
|
+
title: One
|
|
79
|
+
sources: []
|
|
80
|
+
''')
|
|
81
|
+
|
|
82
|
+
errors = validate(conf)
|
|
83
|
+
assert errors == [
|
|
84
|
+
"[] is too short in root.layers[0].sources"
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
def test_missing_cache_source(self):
|
|
88
|
+
conf = self._test_conf()
|
|
89
|
+
del conf['sources']['one_source']
|
|
90
|
+
|
|
91
|
+
errors = validate(conf)
|
|
92
|
+
assert errors == [
|
|
93
|
+
"Source 'one_source' for cache 'one_cache' not found in config"
|
|
94
|
+
]
|
|
95
|
+
|
|
96
|
+
def test_missing_layers_section(self):
|
|
97
|
+
conf = self._test_conf()
|
|
98
|
+
del conf['layers']
|
|
99
|
+
|
|
100
|
+
errors = validate(conf)
|
|
101
|
+
assert errors == [
|
|
102
|
+
"'layers' is a required property in root"
|
|
103
|
+
]
|
|
104
|
+
|
|
105
|
+
def test_missing_services_section(self):
|
|
106
|
+
conf = self._test_conf()
|
|
107
|
+
del conf['services']
|
|
108
|
+
errors = validate(conf)
|
|
109
|
+
assert errors == [
|
|
110
|
+
"'services' is a required property in root"
|
|
111
|
+
]
|
|
112
|
+
|
|
113
|
+
def test_tile_source(self):
|
|
114
|
+
conf = self._test_conf('''
|
|
115
|
+
layers:
|
|
116
|
+
- name: one
|
|
117
|
+
tile_sources: [missing]
|
|
118
|
+
''')
|
|
119
|
+
|
|
120
|
+
errors = validate(conf)
|
|
121
|
+
assert errors == [
|
|
122
|
+
"Tile source 'missing' for layer 'one' not in cache section"
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
def test_missing_grid(self):
|
|
126
|
+
conf = self._test_conf('''
|
|
127
|
+
caches:
|
|
128
|
+
one_cache:
|
|
129
|
+
grids: [MYGRID_OTHERGRID]
|
|
130
|
+
sources: []
|
|
131
|
+
grids:
|
|
132
|
+
MYGRID:
|
|
133
|
+
base: GLOBAL_GEODETIC
|
|
134
|
+
''')
|
|
135
|
+
|
|
136
|
+
errors = validate(conf)
|
|
137
|
+
assert errors == [
|
|
138
|
+
"Grid 'MYGRID_OTHERGRID' for cache 'one_cache' not found in config"
|
|
139
|
+
]
|
|
140
|
+
|
|
141
|
+
def test_misconfigured_wms_source(self):
|
|
142
|
+
conf = self._test_conf()
|
|
143
|
+
|
|
144
|
+
del conf['sources']['one_source']['req']['layers']
|
|
145
|
+
|
|
146
|
+
errors = validate(conf)
|
|
147
|
+
assert errors == [
|
|
148
|
+
"Missing 'layers' for source 'one_source'"
|
|
149
|
+
]
|
|
150
|
+
|
|
151
|
+
def test_misconfigured_mapserver_source_without_globals(self):
|
|
152
|
+
conf = self._test_conf('''
|
|
153
|
+
sources:
|
|
154
|
+
one_source:
|
|
155
|
+
type: mapserver
|
|
156
|
+
req:
|
|
157
|
+
map: foo.map
|
|
158
|
+
mapserver:
|
|
159
|
+
binary: /foo/bar/baz
|
|
160
|
+
''')
|
|
161
|
+
|
|
162
|
+
errors = validate(conf)
|
|
163
|
+
assert errors == [
|
|
164
|
+
'Could not find mapserver binary (/foo/bar/baz)'
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
del conf['sources']['one_source']['mapserver']['binary']
|
|
168
|
+
|
|
169
|
+
errors = validate(conf)
|
|
170
|
+
assert errors == [
|
|
171
|
+
"Missing mapserver binary for source 'one_source'"
|
|
172
|
+
]
|
|
173
|
+
|
|
174
|
+
del conf['sources']['one_source']['mapserver']
|
|
175
|
+
|
|
176
|
+
errors = validate(conf)
|
|
177
|
+
assert errors == [
|
|
178
|
+
"Missing mapserver binary for source 'one_source'"
|
|
179
|
+
]
|
|
180
|
+
|
|
181
|
+
def test_misconfigured_mapserver_source_with_globals(self):
|
|
182
|
+
conf = self._test_conf('''
|
|
183
|
+
sources:
|
|
184
|
+
one_source:
|
|
185
|
+
type: mapserver
|
|
186
|
+
req:
|
|
187
|
+
map: foo.map
|
|
188
|
+
globals:
|
|
189
|
+
mapserver:
|
|
190
|
+
binary: /foo/bar/baz
|
|
191
|
+
''')
|
|
192
|
+
|
|
193
|
+
errors = validate(conf)
|
|
194
|
+
assert errors == [
|
|
195
|
+
'Could not find mapserver binary (/foo/bar/baz)'
|
|
196
|
+
]
|
|
197
|
+
|
|
198
|
+
del conf['globals']['mapserver']['binary']
|
|
199
|
+
|
|
200
|
+
errors = validate(conf)
|
|
201
|
+
assert errors == [
|
|
202
|
+
"Missing mapserver binary for source 'one_source'"
|
|
203
|
+
]
|
|
204
|
+
|
|
205
|
+
def test_tagged_sources_with_layers(self):
|
|
206
|
+
conf = self._test_conf('''
|
|
207
|
+
caches:
|
|
208
|
+
one_cache:
|
|
209
|
+
grids: [GLOBAL_MERCATOR]
|
|
210
|
+
sources: ['one_source:foo,bar']
|
|
211
|
+
''')
|
|
212
|
+
|
|
213
|
+
errors = validate(conf)
|
|
214
|
+
assert errors == [
|
|
215
|
+
"Supported layers for source 'one_source' are 'one' but tagged source "
|
|
216
|
+
"requested layers 'foo, bar'"
|
|
217
|
+
]
|
|
218
|
+
|
|
219
|
+
def test_tagged_layer_sources_with_layers(self):
|
|
220
|
+
conf = self._test_conf('''
|
|
221
|
+
layers:
|
|
222
|
+
- name: one
|
|
223
|
+
title: One
|
|
224
|
+
sources: ['one_source:foo,bar']
|
|
225
|
+
''')
|
|
226
|
+
|
|
227
|
+
errors = validate(conf)
|
|
228
|
+
assert errors == [
|
|
229
|
+
"Supported layers for source 'one_source' are 'one' but tagged source "
|
|
230
|
+
"requested layers 'foo, bar'"
|
|
231
|
+
]
|
|
232
|
+
|
|
233
|
+
def test_tagged_layer_sources_without_layers(self):
|
|
234
|
+
conf = self._test_conf('''
|
|
235
|
+
layers:
|
|
236
|
+
- name: one
|
|
237
|
+
title: One
|
|
238
|
+
sources: ['one_source:foo,bar']
|
|
239
|
+
''')
|
|
240
|
+
|
|
241
|
+
del conf['sources']['one_source']['req']['layers']
|
|
242
|
+
|
|
243
|
+
errors = validate(conf)
|
|
244
|
+
assert errors == []
|
|
245
|
+
|
|
246
|
+
def test_tagged_source_without_layers(self):
|
|
247
|
+
conf = self._test_conf('''
|
|
248
|
+
caches:
|
|
249
|
+
one_cache:
|
|
250
|
+
grids: [GLOBAL_MERCATOR]
|
|
251
|
+
sources: ['one_source:foo,bar']
|
|
252
|
+
''')
|
|
253
|
+
|
|
254
|
+
del conf['sources']['one_source']['req']['layers']
|
|
255
|
+
|
|
256
|
+
errors = validate(conf)
|
|
257
|
+
assert errors == []
|
|
258
|
+
|
|
259
|
+
def test_tagged_source_with_colons(self):
|
|
260
|
+
conf = self._test_conf('''
|
|
261
|
+
caches:
|
|
262
|
+
one_cache:
|
|
263
|
+
grids: [GLOBAL_MERCATOR]
|
|
264
|
+
sources: ['one_source:ns:foo,ns:bar']
|
|
265
|
+
''')
|
|
266
|
+
|
|
267
|
+
del conf['sources']['one_source']['req']['layers']
|
|
268
|
+
|
|
269
|
+
errors = validate(conf)
|
|
270
|
+
assert errors == []
|
|
271
|
+
|
|
272
|
+
def test_with_grouped_layer(self):
|
|
273
|
+
conf = self._test_conf('''
|
|
274
|
+
layers:
|
|
275
|
+
- name: group
|
|
276
|
+
title: Group
|
|
277
|
+
layers:
|
|
278
|
+
- name: one
|
|
279
|
+
title: One
|
|
280
|
+
sources: [one_cache]
|
|
281
|
+
''')
|
|
282
|
+
|
|
283
|
+
errors = validate(conf)
|
|
284
|
+
assert errors == []
|
|
285
|
+
|
|
286
|
+
def test_without_cache(self):
|
|
287
|
+
conf = self._test_conf('''
|
|
288
|
+
layers:
|
|
289
|
+
- name: one
|
|
290
|
+
title: One
|
|
291
|
+
sources: [one_source]
|
|
292
|
+
''')
|
|
293
|
+
|
|
294
|
+
errors = validate(conf)
|
|
295
|
+
assert errors == []
|
|
296
|
+
|
|
297
|
+
def test_mapserver_with_tagged_layers(self):
|
|
298
|
+
conf = self._test_conf('''
|
|
299
|
+
sources:
|
|
300
|
+
one_source:
|
|
301
|
+
type: mapserver
|
|
302
|
+
req:
|
|
303
|
+
map: foo.map
|
|
304
|
+
layers: one
|
|
305
|
+
mapserver:
|
|
306
|
+
binary: /foo/bar/baz
|
|
307
|
+
caches:
|
|
308
|
+
one_cache:
|
|
309
|
+
grids: [GLOBAL_MERCATOR]
|
|
310
|
+
sources: ['one_source:foo,bar']
|
|
311
|
+
''')
|
|
312
|
+
|
|
313
|
+
errors = validate(conf)
|
|
314
|
+
assert errors == [
|
|
315
|
+
'Could not find mapserver binary (/foo/bar/baz)',
|
|
316
|
+
"Supported layers for source 'one_source' are 'one' but tagged source "
|
|
317
|
+
"requested layers 'foo, bar'"
|
|
318
|
+
]
|
|
319
|
+
|
|
320
|
+
def test_mapnik_with_tagged_layers(self):
|
|
321
|
+
conf = self._test_conf('''
|
|
322
|
+
sources:
|
|
323
|
+
one_source:
|
|
324
|
+
type: mapnik
|
|
325
|
+
mapfile: foo.map
|
|
326
|
+
layers: one
|
|
327
|
+
caches:
|
|
328
|
+
one_cache:
|
|
329
|
+
grids: [GLOBAL_MERCATOR]
|
|
330
|
+
sources: ['one_source:foo,bar']
|
|
331
|
+
''')
|
|
332
|
+
|
|
333
|
+
errors = validate(conf)
|
|
334
|
+
assert errors == [
|
|
335
|
+
"Supported layers for source 'one_source' are 'one' but tagged source "
|
|
336
|
+
"requested layers 'foo, bar'"
|
|
337
|
+
]
|
|
338
|
+
|
|
339
|
+
def test_tagged_layers_for_unsupported_source_type(self):
|
|
340
|
+
conf = self._test_conf('''
|
|
341
|
+
sources:
|
|
342
|
+
one_source:
|
|
343
|
+
type: tile
|
|
344
|
+
url: http://localhost/tiles/
|
|
345
|
+
caches:
|
|
346
|
+
one_cache:
|
|
347
|
+
grids: [GLOBAL_MERCATOR]
|
|
348
|
+
sources: ['one_source:foo,bar']
|
|
349
|
+
''')
|
|
350
|
+
|
|
351
|
+
errors = validate(conf)
|
|
352
|
+
assert errors == [
|
|
353
|
+
"Found tagged source 'one_source' in cache 'one_cache' but tagged sources "
|
|
354
|
+
"only supported for 'wms, mapserver, mapnik' sources"
|
|
355
|
+
]
|
|
356
|
+
|
|
357
|
+
def test_cascaded_caches(self):
|
|
358
|
+
conf = self._test_conf('''
|
|
359
|
+
caches:
|
|
360
|
+
one_cache:
|
|
361
|
+
sources: [two_cache]
|
|
362
|
+
two_cache:
|
|
363
|
+
grids: [GLOBAL_MERCATOR]
|
|
364
|
+
sources: ['one_source']
|
|
365
|
+
''')
|
|
366
|
+
|
|
367
|
+
errors = validate(conf)
|
|
368
|
+
assert errors == []
|
|
369
|
+
|
|
370
|
+
def test_with_int_0_as_names_and_layers(self):
|
|
371
|
+
conf = self._test_conf('''
|
|
372
|
+
services:
|
|
373
|
+
wms:
|
|
374
|
+
md:
|
|
375
|
+
title: MapProxy
|
|
376
|
+
layers:
|
|
377
|
+
- name: 0
|
|
378
|
+
title: One
|
|
379
|
+
sources: [0]
|
|
380
|
+
caches:
|
|
381
|
+
0:
|
|
382
|
+
grids: [GLOBAL_MERCATOR]
|
|
383
|
+
sources: [0]
|
|
384
|
+
sources:
|
|
385
|
+
0:
|
|
386
|
+
type: wms
|
|
387
|
+
req:
|
|
388
|
+
url: http://localhost/service?
|
|
389
|
+
layers: 0
|
|
390
|
+
''')
|
|
391
|
+
|
|
392
|
+
errors = validate(conf)
|
|
393
|
+
assert errors == []
|
|
394
|
+
|
|
395
|
+
def test_band_merge_missing_source(self):
|
|
396
|
+
conf = self._test_conf('''
|
|
397
|
+
caches:
|
|
398
|
+
one_cache:
|
|
399
|
+
sources:
|
|
400
|
+
l:
|
|
401
|
+
- source: dop
|
|
402
|
+
band: 1
|
|
403
|
+
factor: 0.4
|
|
404
|
+
- source: missing1
|
|
405
|
+
band: 2
|
|
406
|
+
factor: 0.2
|
|
407
|
+
- source: cache_missing_source
|
|
408
|
+
band: 2
|
|
409
|
+
factor: 0.2
|
|
410
|
+
grids: [GLOBAL_MERCATOR]
|
|
411
|
+
cache_missing_source:
|
|
412
|
+
sources: [missing2]
|
|
413
|
+
grids: [GLOBAL_MERCATOR]
|
|
414
|
+
|
|
415
|
+
sources:
|
|
416
|
+
dop:
|
|
417
|
+
type: wms
|
|
418
|
+
req:
|
|
419
|
+
url: http://localhost/service?
|
|
420
|
+
layers: dop
|
|
421
|
+
''')
|
|
422
|
+
|
|
423
|
+
errors = validate(conf)
|
|
424
|
+
assert errors == [
|
|
425
|
+
"Source 'missing1' for cache 'one_cache' not found in config",
|
|
426
|
+
"Source 'missing2' for cache 'cache_missing_source' not found in config",
|
|
427
|
+
]
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# This file is part of the MapProxy project.
|
|
2
|
+
# Copyright (C) 2010 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
|
+
|
|
17
|
+
from mapproxy.config import Options, base_config, load_base_config
|
|
18
|
+
from mapproxy.test.helper import TempFiles
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class TestOptions(object):
|
|
22
|
+
def test_update_overwrite(self):
|
|
23
|
+
d = Options(foo='bar', baz=4)
|
|
24
|
+
d.update(Options(baz=5))
|
|
25
|
+
assert d.baz == 5
|
|
26
|
+
assert d.foo == 'bar'
|
|
27
|
+
|
|
28
|
+
def test_update_new(self):
|
|
29
|
+
d = Options(foo='bar', baz=4)
|
|
30
|
+
d.update(Options(biz=5))
|
|
31
|
+
assert d.baz == 4
|
|
32
|
+
assert d.biz == 5
|
|
33
|
+
assert d.foo == 'bar'
|
|
34
|
+
|
|
35
|
+
def test_update_recursive(self):
|
|
36
|
+
d = Options(
|
|
37
|
+
foo='bar',
|
|
38
|
+
baz=Options(ham=2, eggs=4))
|
|
39
|
+
d.update(Options(baz=Options(eggs=5)))
|
|
40
|
+
assert d.foo == 'bar'
|
|
41
|
+
assert d.baz.ham == 2
|
|
42
|
+
assert d.baz.eggs == 5
|
|
43
|
+
|
|
44
|
+
def test_compare(self):
|
|
45
|
+
assert Options(foo=4) == Options(foo=4)
|
|
46
|
+
assert Options(foo=Options(bar=4)) == Options(foo=Options(bar=4))
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class TestDefaultsLoading(object):
|
|
50
|
+
def teardown_method(self):
|
|
51
|
+
load_base_config(clear_existing=True)
|
|
52
|
+
|
|
53
|
+
defaults_yaml = b"""
|
|
54
|
+
foo:
|
|
55
|
+
bar:
|
|
56
|
+
ham: 2
|
|
57
|
+
eggs: 4
|
|
58
|
+
biz: 'foobar'
|
|
59
|
+
wiz: 'foobar'
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
def test_defaults(self):
|
|
63
|
+
with TempFiles() as tmp:
|
|
64
|
+
with open(tmp[0], 'wb') as f:
|
|
65
|
+
f.write(TestDefaultsLoading.defaults_yaml)
|
|
66
|
+
load_base_config(config_file=tmp[0], clear_existing=True)
|
|
67
|
+
|
|
68
|
+
assert base_config().biz == 'foobar'
|
|
69
|
+
assert base_config().wiz == 'foobar'
|
|
70
|
+
assert base_config().foo.bar.ham == 2
|
|
71
|
+
assert base_config().foo.bar.eggs == 4
|
|
72
|
+
assert not hasattr(base_config(), 'wms')
|
|
73
|
+
|
|
74
|
+
def test_defaults_overwrite(self):
|
|
75
|
+
with TempFiles(2) as tmp:
|
|
76
|
+
with open(tmp[0], 'wb') as f:
|
|
77
|
+
f.write(TestDefaultsLoading.defaults_yaml)
|
|
78
|
+
with open(tmp[1], 'wb') as f:
|
|
79
|
+
f.write(b"""
|
|
80
|
+
baz: [9, 2, 1, 4]
|
|
81
|
+
biz: 'barfoo'
|
|
82
|
+
foo:
|
|
83
|
+
bar:
|
|
84
|
+
eggs: 5
|
|
85
|
+
""")
|
|
86
|
+
|
|
87
|
+
load_base_config(config_file=tmp[0], clear_existing=True)
|
|
88
|
+
load_base_config(config_file=tmp[1])
|
|
89
|
+
|
|
90
|
+
assert base_config().biz == 'barfoo'
|
|
91
|
+
assert base_config().wiz == 'foobar'
|
|
92
|
+
assert base_config().baz == [9, 2, 1, 4]
|
|
93
|
+
assert base_config().foo.bar.ham == 2
|
|
94
|
+
assert base_config().foo.bar.eggs == 5
|
|
95
|
+
assert not hasattr(base_config(), 'wms')
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class TestSRSConfig(object):
|
|
99
|
+
def teardown_method(self):
|
|
100
|
+
load_base_config(clear_existing=True)
|
|
101
|
+
|
|
102
|
+
def test_user_srs_definitions(self):
|
|
103
|
+
user_yaml = b"""
|
|
104
|
+
srs:
|
|
105
|
+
axis_order_ne: ['EPSG:9999']
|
|
106
|
+
"""
|
|
107
|
+
with TempFiles() as tmp:
|
|
108
|
+
with open(tmp[0], 'wb') as f:
|
|
109
|
+
f.write(user_yaml)
|
|
110
|
+
|
|
111
|
+
load_base_config(config_file=tmp[0])
|
|
112
|
+
|
|
113
|
+
assert 'EPSG:9999' in base_config().srs.axis_order_ne
|
|
114
|
+
assert 'EPSG:9999' not in base_config().srs.axis_order_en
|
|
115
|
+
|
|
116
|
+
# defaults still there
|
|
117
|
+
assert 'EPSG:31468' in base_config().srs.axis_order_ne
|
|
118
|
+
assert 'CRS:84' in base_config().srs.axis_order_en
|