MapProxy 1.16.1__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/__init__.py +0 -0
- mapproxy/cache/__init__.py +36 -0
- mapproxy/cache/azureblob.py +145 -0
- mapproxy/cache/base.py +111 -0
- mapproxy/cache/compact.py +664 -0
- mapproxy/cache/couchdb.py +295 -0
- mapproxy/cache/dummy.py +34 -0
- mapproxy/cache/file.py +185 -0
- mapproxy/cache/geopackage.py +609 -0
- mapproxy/cache/legend.py +83 -0
- mapproxy/cache/mbtiles.py +392 -0
- mapproxy/cache/meta.py +78 -0
- mapproxy/cache/path.py +250 -0
- mapproxy/cache/redis.py +88 -0
- mapproxy/cache/renderd.py +95 -0
- mapproxy/cache/riak.py +202 -0
- mapproxy/cache/s3.py +177 -0
- mapproxy/cache/tile.py +699 -0
- mapproxy/client/__init__.py +0 -0
- mapproxy/client/arcgis.py +79 -0
- mapproxy/client/cgi.py +139 -0
- mapproxy/client/http.py +315 -0
- mapproxy/client/log.py +33 -0
- mapproxy/client/tile.py +150 -0
- mapproxy/client/wms.py +254 -0
- mapproxy/compat/__init__.py +46 -0
- mapproxy/compat/image.py +79 -0
- mapproxy/compat/itertools.py +29 -0
- mapproxy/compat/modules.py +13 -0
- mapproxy/config/__init__.py +22 -0
- mapproxy/config/config.py +201 -0
- mapproxy/config/coverage.py +107 -0
- mapproxy/config/defaults.py +98 -0
- mapproxy/config/loader.py +2286 -0
- mapproxy/config/spec.py +644 -0
- mapproxy/config/validator.py +239 -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 +593 -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 +142 -0
- mapproxy/featureinfo.py +252 -0
- mapproxy/grid.py +1170 -0
- mapproxy/image/__init__.py +536 -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 +75 -0
- mapproxy/image/merge.py +316 -0
- mapproxy/image/message.py +347 -0
- mapproxy/image/opts.py +182 -0
- mapproxy/image/tile.py +167 -0
- mapproxy/image/transform.py +350 -0
- mapproxy/layer.py +470 -0
- mapproxy/multiapp.py +231 -0
- mapproxy/proj.py +302 -0
- mapproxy/request/__init__.py +18 -0
- mapproxy/request/arcgis.py +259 -0
- mapproxy/request/base.py +476 -0
- mapproxy/request/tile.py +128 -0
- mapproxy/request/wms/__init__.py +793 -0
- mapproxy/request/wms/exception.py +99 -0
- mapproxy/request/wmts.py +436 -0
- mapproxy/response.py +237 -0
- mapproxy/script/__init__.py +0 -0
- mapproxy/script/conf/__init__.py +0 -0
- mapproxy/script/conf/app.py +195 -0
- mapproxy/script/conf/caches.py +45 -0
- mapproxy/script/conf/layers.py +54 -0
- mapproxy/script/conf/seeds.py +37 -0
- mapproxy/script/conf/sources.py +86 -0
- mapproxy/script/conf/utils.py +143 -0
- mapproxy/script/defrag.py +184 -0
- mapproxy/script/export.py +333 -0
- mapproxy/script/grids.py +188 -0
- mapproxy/script/scales.py +126 -0
- mapproxy/script/util.py +406 -0
- mapproxy/script/wms_capabilities.py +152 -0
- mapproxy/seed/__init__.py +0 -0
- mapproxy/seed/cachelock.py +121 -0
- mapproxy/seed/cleanup.py +187 -0
- mapproxy/seed/config.py +469 -0
- mapproxy/seed/script.py +388 -0
- mapproxy/seed/seeder.py +538 -0
- mapproxy/seed/spec.py +64 -0
- mapproxy/seed/util.py +254 -0
- mapproxy/service/__init__.py +14 -0
- mapproxy/service/base.py +46 -0
- mapproxy/service/demo.py +356 -0
- mapproxy/service/kml.py +331 -0
- mapproxy/service/ows.py +38 -0
- mapproxy/service/template_helper.py +53 -0
- mapproxy/service/templates/demo/capabilities_demo.html +16 -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 +103 -0
- mapproxy/service/templates/demo/wms_demo.html +140 -0
- mapproxy/service/templates/demo/wmts_demo.html +110 -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 +536 -0
- mapproxy/service/wms.py +851 -0
- mapproxy/service/wmts.py +381 -0
- mapproxy/source/__init__.py +75 -0
- mapproxy/source/arcgis.py +39 -0
- mapproxy/source/error.py +39 -0
- mapproxy/source/mapnik.py +259 -0
- mapproxy/source/tile.py +96 -0
- mapproxy/source/wms.py +270 -0
- mapproxy/srs.py +726 -0
- mapproxy/template.py +54 -0
- mapproxy/test/__init__.py +0 -0
- mapproxy/test/conftest.py +7 -0
- mapproxy/test/helper.py +247 -0
- mapproxy/test/http.py +494 -0
- mapproxy/test/image.py +210 -0
- mapproxy/test/mocker.py +2268 -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_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 +100 -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 +30 -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 +1134 -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_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 +106 -0
- mapproxy/test/system/test_demo_with_extra_service.py +53 -0
- mapproxy/test/system/test_dimensions.py +278 -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 +262 -0
- mapproxy/test/system/test_layergroups.py +160 -0
- mapproxy/test/system/test_legendgraphic.py +308 -0
- mapproxy/test/system/test_mapnik.py +161 -0
- mapproxy/test/system/test_mapserver.py +81 -0
- mapproxy/test/system/test_mixed_mode_format.py +195 -0
- mapproxy/test/system/test_multi_cache_layers.py +167 -0
- mapproxy/test/system/test_multiapp.py +92 -0
- mapproxy/test/system/test_refresh.py +207 -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 +422 -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 +276 -0
- mapproxy/test/system/test_tms_origin.py +46 -0
- mapproxy/test/system/test_util_conf.py +304 -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 +1611 -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 +425 -0
- mapproxy/test/test_http_helper.py +219 -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 +245 -0
- mapproxy/test/unit/test_auth.py +419 -0
- mapproxy/test/unit/test_cache.py +1193 -0
- mapproxy/test/unit/test_cache_azureblob.py +94 -0
- mapproxy/test/unit/test_cache_compact.py +319 -0
- mapproxy/test/unit/test_cache_couchdb.py +114 -0
- mapproxy/test/unit/test_cache_geopackage.py +221 -0
- mapproxy/test/unit/test_cache_redis.py +67 -0
- mapproxy/test/unit/test_cache_riak.py +76 -0
- mapproxy/test/unit/test_cache_s3.py +84 -0
- mapproxy/test/unit/test_cache_tile.py +427 -0
- mapproxy/test/unit/test_client.py +479 -0
- mapproxy/test/unit/test_client_arcgis.py +73 -0
- mapproxy/test/unit/test_client_cgi.py +136 -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 +1061 -0
- mapproxy/test/unit/test_conf_validator.py +416 -0
- mapproxy/test/unit/test_config.py +117 -0
- mapproxy/test/unit/test_decorate_img.py +185 -0
- mapproxy/test/unit/test_exceptions.py +258 -0
- mapproxy/test/unit/test_featureinfo.py +291 -0
- mapproxy/test/unit/test_file_lock_load.py +49 -0
- mapproxy/test/unit/test_geom.py +503 -0
- mapproxy/test/unit/test_grid.py +1258 -0
- mapproxy/test/unit/test_image.py +1053 -0
- mapproxy/test/unit/test_image_mask.py +181 -0
- mapproxy/test/unit/test_image_messages.py +197 -0
- mapproxy/test/unit/test_image_options.py +160 -0
- mapproxy/test/unit/test_isodate.py +122 -0
- mapproxy/test/unit/test_multiapp.py +163 -0
- mapproxy/test/unit/test_ogr_reader.py +50 -0
- mapproxy/test/unit/test_request.py +745 -0
- mapproxy/test/unit/test_request_wmts.py +178 -0
- mapproxy/test/unit/test_response.py +79 -0
- mapproxy/test/unit/test_seed.py +365 -0
- mapproxy/test/unit/test_seed_cachelock.py +90 -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 +69 -0
- mapproxy/tilefilter.py +59 -0
- mapproxy/util/__init__.py +0 -0
- mapproxy/util/async_.py +227 -0
- mapproxy/util/collections.py +132 -0
- mapproxy/util/coverage.py +329 -0
- mapproxy/util/escape.py +10 -0
- mapproxy/util/ext/__init__.py +14 -0
- mapproxy/util/ext/dictspec/__init__.py +1 -0
- mapproxy/util/ext/dictspec/spec.py +124 -0
- mapproxy/util/ext/dictspec/test/__init__.py +0 -0
- mapproxy/util/ext/dictspec/test/test_validator.py +274 -0
- mapproxy/util/ext/dictspec/validator.py +189 -0
- mapproxy/util/ext/local.py +196 -0
- mapproxy/util/ext/lockfile.py +138 -0
- mapproxy/util/ext/odict.py +330 -0
- mapproxy/util/ext/serving.py +508 -0
- mapproxy/util/ext/tempita/__init__.py +1174 -0
- mapproxy/util/ext/tempita/_looper.py +163 -0
- mapproxy/util/ext/tempita/compat3.py +46 -0
- mapproxy/util/ext/wmsparse/__init__.py +3 -0
- mapproxy/util/ext/wmsparse/duration.py +597 -0
- mapproxy/util/ext/wmsparse/parse.py +305 -0
- mapproxy/util/ext/wmsparse/test/__init__.py +0 -0
- mapproxy/util/ext/wmsparse/test/test_parse.py +162 -0
- mapproxy/util/ext/wmsparse/test/test_util.py +23 -0
- mapproxy/util/ext/wmsparse/test/wms-large-111.xml +2114 -0
- mapproxy/util/ext/wmsparse/test/wms-omniscale-111.xml +90 -0
- mapproxy/util/ext/wmsparse/test/wms-omniscale-130.xml +120 -0
- mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml +386 -0
- mapproxy/util/ext/wmsparse/util.py +187 -0
- mapproxy/util/fs.py +156 -0
- mapproxy/util/geom.py +295 -0
- mapproxy/util/lib.py +115 -0
- mapproxy/util/lock.py +163 -0
- mapproxy/util/ogr.py +231 -0
- mapproxy/util/py.py +81 -0
- mapproxy/util/times.py +75 -0
- mapproxy/util/yaml.py +56 -0
- mapproxy/version.py +31 -0
- mapproxy/wsgiapp.py +164 -0
- mapproxy-1.16.1.dist-info/METADATA +151 -0
- mapproxy-1.16.1.dist-info/RECORD +458 -0
- mapproxy-1.16.1.dist-info/WHEEL +5 -0
- mapproxy-1.16.1.dist-info/entry_points.txt +3 -0
- mapproxy-1.16.1.dist-info/licenses/AUTHORS.txt +33 -0
- mapproxy-1.16.1.dist-info/licenses/COPYING.txt +60 -0
- mapproxy-1.16.1.dist-info/licenses/LICENSE.txt +202 -0
- mapproxy-1.16.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# This file is part of the MapProxy project.
|
|
2
|
+
# Copyright (C) 2014 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
|
+
from mapproxy.request.wms import WMS111MapRequest, WMS111CapabilitiesRequest
|
|
19
|
+
from mapproxy.test.image import is_png, is_transparent
|
|
20
|
+
from mapproxy.test.image import tmp_image, assert_colors_equal, img_from_buf
|
|
21
|
+
from mapproxy.test.http import mock_httpd
|
|
22
|
+
|
|
23
|
+
from mapproxy.test.system import SysTest
|
|
24
|
+
from mapproxy.test.system.test_wms import bbox_srs_from_boundingbox
|
|
25
|
+
|
|
26
|
+
import pytest
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@pytest.fixture(scope="module")
|
|
30
|
+
def config_file():
|
|
31
|
+
return "wms_srs_extent.yaml"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class TestWMSSRSExtentTest(SysTest):
|
|
35
|
+
|
|
36
|
+
def setup(self):
|
|
37
|
+
self.common_req = WMS111MapRequest(
|
|
38
|
+
url="/service?", param=dict(service="WMS", version="1.1.1")
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
def test_wms_capabilities(self, app):
|
|
42
|
+
req = WMS111CapabilitiesRequest(url="/service?").copy_with_request_params(
|
|
43
|
+
self.common_req
|
|
44
|
+
)
|
|
45
|
+
resp = app.get(req)
|
|
46
|
+
assert resp.content_type == "application/vnd.ogc.wms_xml"
|
|
47
|
+
xml = resp.lxml
|
|
48
|
+
|
|
49
|
+
bboxs = xml.xpath("//Layer/Layer[1]/BoundingBox")
|
|
50
|
+
bboxs = dict((e.attrib["SRS"], e) for e in bboxs)
|
|
51
|
+
|
|
52
|
+
assert bbox_srs_from_boundingbox(bboxs["EPSG:31467"]) == pytest.approx(
|
|
53
|
+
[2750000.0, 5000000.0, 4250000.0, 6500000.0]
|
|
54
|
+
)
|
|
55
|
+
assert bbox_srs_from_boundingbox(bboxs["EPSG:25832"]) == pytest.approx(
|
|
56
|
+
[0.0, 3500000.0, 1000000.0, 8500000.0]
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
assert bbox_srs_from_boundingbox(bboxs["EPSG:3857"]) in (
|
|
60
|
+
# world BBOX is transformed differently depending on PROJ version
|
|
61
|
+
pytest.approx([-20037508.3428, -20037508.3428, 20037508.3428, 20037508.3428]),
|
|
62
|
+
pytest.approx([-20037508.3428, -147730762.67, 20037508.3428, 147730762.67]),
|
|
63
|
+
)
|
|
64
|
+
assert bbox_srs_from_boundingbox(bboxs["EPSG:4326"]) == pytest.approx(
|
|
65
|
+
[-180.0, -90.0, 180.0, 90.0]
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
# bboxes clipped to coverage
|
|
69
|
+
bboxs = xml.xpath("//Layer/Layer[2]/BoundingBox")
|
|
70
|
+
bboxs = dict((e.attrib["SRS"], e) for e in bboxs)
|
|
71
|
+
assert bbox_srs_from_boundingbox(bboxs["EPSG:31467"]) == pytest.approx(
|
|
72
|
+
[3213331.57335, 5540436.91132, 3571769.72263, 6104110.432],
|
|
73
|
+
3, # EPSG params changed with proj versions
|
|
74
|
+
)
|
|
75
|
+
assert bbox_srs_from_boundingbox(bboxs["EPSG:25832"]) == pytest.approx(
|
|
76
|
+
[213372.048961, 5538660.64621, 571666.447504, 6102110.74547]
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
assert bbox_srs_from_boundingbox(bboxs["EPSG:3857"]) == pytest.approx(
|
|
80
|
+
[556597.453966, 6446275.84102, 1113194.90793, 7361866.11305]
|
|
81
|
+
)
|
|
82
|
+
assert bbox_srs_from_boundingbox(bboxs["EPSG:4326"]) == pytest.approx(
|
|
83
|
+
[5.0, 50.0, 10.0, 55.0]
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
def test_out_of_extent(self, app):
|
|
87
|
+
resp = app.get(
|
|
88
|
+
"http://localhost/service?SERVICE=WMS&REQUEST=GetMap"
|
|
89
|
+
"&LAYERS=direct&STYLES="
|
|
90
|
+
"&WIDTH=100&HEIGHT=100&FORMAT=image/png"
|
|
91
|
+
"&BBOX=-10000,0,0,1000&SRS=EPSG:25832"
|
|
92
|
+
"&VERSION=1.1.0&TRANSPARENT=TRUE"
|
|
93
|
+
)
|
|
94
|
+
# empty/transparent response
|
|
95
|
+
assert resp.content_type == "image/png"
|
|
96
|
+
assert is_png(resp.body)
|
|
97
|
+
assert is_transparent(resp.body)
|
|
98
|
+
|
|
99
|
+
def test_out_of_extent_bgcolor(self, app):
|
|
100
|
+
resp = app.get(
|
|
101
|
+
"http://localhost/service?SERVICE=WMS&REQUEST=GetMap"
|
|
102
|
+
"&LAYERS=direct&STYLES="
|
|
103
|
+
"&WIDTH=100&HEIGHT=100&FORMAT=image/png"
|
|
104
|
+
"&BBOX=-10000,0,0,1000&SRS=EPSG:25832"
|
|
105
|
+
"&VERSION=1.1.0&TRANSPARENT=FALSE&BGCOLOR=0xff0000"
|
|
106
|
+
)
|
|
107
|
+
# red response
|
|
108
|
+
assert resp.content_type == "image/png"
|
|
109
|
+
assert is_png(resp.body)
|
|
110
|
+
assert_colors_equal(
|
|
111
|
+
img_from_buf(resp.body).convert("RGBA"), [(100 * 100, [255, 0, 0, 255])]
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
def test_clipped(self, app):
|
|
115
|
+
with tmp_image((256, 256), format="png", color=(255, 0, 0)) as img:
|
|
116
|
+
expected_req = (
|
|
117
|
+
{
|
|
118
|
+
"path": r"/service?LAYERs=bar&SERVICE=WMS&FORMAT=image%2Fpng"
|
|
119
|
+
"&REQUEST=GetMap&HEIGHT=100&SRS=EPSG%3A25832&styles="
|
|
120
|
+
"&VERSION=1.1.1&BBOX=0.0,3500000.0,150.0,3500100.0"
|
|
121
|
+
"&WIDTH=75"
|
|
122
|
+
},
|
|
123
|
+
{"body": img.read(), "headers": {"content-type": "image/png"}},
|
|
124
|
+
)
|
|
125
|
+
with mock_httpd(("localhost", 42423), [expected_req]):
|
|
126
|
+
resp = app.get(
|
|
127
|
+
"http://localhost/service?SERVICE=WMS&REQUEST=GetMap"
|
|
128
|
+
"&LAYERS=direct&STYLES="
|
|
129
|
+
"&WIDTH=100&HEIGHT=100&FORMAT=image/png"
|
|
130
|
+
"&BBOX=-50,3500000,150,3500100&SRS=EPSG:25832"
|
|
131
|
+
"&VERSION=1.1.0&TRANSPARENT=TRUE"
|
|
132
|
+
)
|
|
133
|
+
assert resp.content_type == "image/png"
|
|
134
|
+
assert is_png(resp.body)
|
|
135
|
+
colors = sorted(img_from_buf(resp.body).convert("RGBA").getcolors())
|
|
136
|
+
# quarter is clipped, check if it's transparent
|
|
137
|
+
assert colors[0][0] == (25 * 100)
|
|
138
|
+
assert colors[0][1][3] == 0
|
|
139
|
+
assert colors[1] == (75 * 100, (255, 0, 0, 255))
|
|
140
|
+
|
|
141
|
+
def test_clipped_bgcolor(self, app):
|
|
142
|
+
with tmp_image((256, 256), format="png", color=(255, 0, 0)) as img:
|
|
143
|
+
expected_req = (
|
|
144
|
+
{
|
|
145
|
+
"path": r"/service?LAYERs=bar&SERVICE=WMS&FORMAT=image%2Fpng"
|
|
146
|
+
"&REQUEST=GetMap&HEIGHT=100&SRS=EPSG%3A25832&styles="
|
|
147
|
+
"&VERSION=1.1.1&BBOX=0.0,3500000.0,100.0,3500100.0"
|
|
148
|
+
"&WIDTH=50"
|
|
149
|
+
},
|
|
150
|
+
{"body": img.read(), "headers": {"content-type": "image/png"}},
|
|
151
|
+
)
|
|
152
|
+
with mock_httpd(("localhost", 42423), [expected_req]):
|
|
153
|
+
resp = app.get(
|
|
154
|
+
"http://localhost/service?SERVICE=WMS&REQUEST=GetMap"
|
|
155
|
+
"&LAYERS=direct&STYLES="
|
|
156
|
+
"&WIDTH=100&HEIGHT=100&FORMAT=image/png"
|
|
157
|
+
"&BBOX=-100,3500000,100,3500100&SRS=EPSG:25832"
|
|
158
|
+
"&VERSION=1.1.0&TRANSPARENT=FALSE&BGCOLOR=0x00ff00"
|
|
159
|
+
)
|
|
160
|
+
assert resp.content_type == "image/png"
|
|
161
|
+
assert is_png(resp.body)
|
|
162
|
+
assert_colors_equal(
|
|
163
|
+
img_from_buf(resp.body).convert("RGBA"),
|
|
164
|
+
[(50 * 100, [255, 0, 0, 255]), (50 * 100, [0, 255, 0, 255])],
|
|
165
|
+
)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# This file is part of the MapProxy project.
|
|
2
|
+
# Copyright (C) 2014 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
|
+
from mapproxy.test.system import SysTest
|
|
19
|
+
from mapproxy.test.system.test_wms import is_110_capa, is_111_capa, is_130_capa
|
|
20
|
+
|
|
21
|
+
import pytest
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class TestLimitedWMSVersionsTest(SysTest):
|
|
25
|
+
|
|
26
|
+
@pytest.fixture(scope="class")
|
|
27
|
+
def config_file(self):
|
|
28
|
+
return "wms_versions.yaml"
|
|
29
|
+
|
|
30
|
+
def test_default_version_130(self, app):
|
|
31
|
+
resp = app.get("http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities")
|
|
32
|
+
assert is_111_capa(resp.lxml)
|
|
33
|
+
|
|
34
|
+
def test_supported_version_110(self, app):
|
|
35
|
+
resp = app.get(
|
|
36
|
+
"http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities"
|
|
37
|
+
"&VERSION=1.1.0"
|
|
38
|
+
)
|
|
39
|
+
assert is_110_capa(resp.lxml)
|
|
40
|
+
|
|
41
|
+
def test_unknown_version_113(self, app):
|
|
42
|
+
resp = app.get(
|
|
43
|
+
"http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities"
|
|
44
|
+
"&VERSION=1.1.3"
|
|
45
|
+
)
|
|
46
|
+
assert is_111_capa(resp.lxml)
|
|
47
|
+
|
|
48
|
+
def test_unknown_version_090(self, app):
|
|
49
|
+
resp = app.get(
|
|
50
|
+
"http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities"
|
|
51
|
+
"&WMTVER=0.9.0"
|
|
52
|
+
)
|
|
53
|
+
assert is_110_capa(resp.lxml)
|
|
54
|
+
|
|
55
|
+
def test_unsupported_version_130(self, app):
|
|
56
|
+
resp = app.get(
|
|
57
|
+
"http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities"
|
|
58
|
+
"&VERSION=1.3.0"
|
|
59
|
+
)
|
|
60
|
+
assert is_111_capa(resp.lxml)
|
|
61
|
+
|
|
62
|
+
def test_unknown_version_200(self, app):
|
|
63
|
+
resp = app.get(
|
|
64
|
+
"http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities"
|
|
65
|
+
"&VERSION=2.0.0"
|
|
66
|
+
)
|
|
67
|
+
assert is_111_capa(resp.lxml)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class TestWMSVersionsTest(SysTest):
|
|
71
|
+
|
|
72
|
+
@pytest.fixture(scope="class")
|
|
73
|
+
def config_file(self):
|
|
74
|
+
return "layer.yaml"
|
|
75
|
+
|
|
76
|
+
def test_default_version_130(self, app):
|
|
77
|
+
resp = app.get("http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities")
|
|
78
|
+
assert is_130_capa(resp.lxml)
|
|
79
|
+
|
|
80
|
+
def test_unknown_version_200(self, app):
|
|
81
|
+
resp = app.get(
|
|
82
|
+
"http://localhost/service?SERVICE=WMS&REQUEST=GetCapabilities"
|
|
83
|
+
"&VERSION=2.0.0"
|
|
84
|
+
)
|
|
85
|
+
assert is_130_capa(resp.lxml)
|
|
@@ -0,0 +1,116 @@
|
|
|
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
|
+
from __future__ import division
|
|
17
|
+
|
|
18
|
+
from io import BytesIO
|
|
19
|
+
|
|
20
|
+
import pytest
|
|
21
|
+
|
|
22
|
+
from mapproxy.request.wms import (
|
|
23
|
+
WMS111MapRequest,
|
|
24
|
+
WMS111FeatureInfoRequest,
|
|
25
|
+
WMS111CapabilitiesRequest,
|
|
26
|
+
)
|
|
27
|
+
from mapproxy.test.image import is_jpeg
|
|
28
|
+
from mapproxy.test.helper import validate_with_dtd
|
|
29
|
+
from mapproxy.test.http import assert_no_cache
|
|
30
|
+
from mapproxy.test.system.test_wms import is_111_exception
|
|
31
|
+
from mapproxy.test.system import SysTest
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@pytest.fixture(scope="module")
|
|
35
|
+
def config_file():
|
|
36
|
+
return "layer.yaml"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class TestWMSC(SysTest):
|
|
40
|
+
|
|
41
|
+
def setup(self):
|
|
42
|
+
self.common_cap_req = WMS111CapabilitiesRequest(
|
|
43
|
+
url="/service?", param=dict(service="WMS", version="1.1.1")
|
|
44
|
+
)
|
|
45
|
+
self.common_map_req = WMS111MapRequest(
|
|
46
|
+
url="/service?",
|
|
47
|
+
param=dict(
|
|
48
|
+
service="WMS",
|
|
49
|
+
version="1.1.1",
|
|
50
|
+
bbox="-20037508,0.0,0.0,20037508",
|
|
51
|
+
width="256",
|
|
52
|
+
height="256",
|
|
53
|
+
layers="wms_cache",
|
|
54
|
+
srs="EPSG:900913",
|
|
55
|
+
format="image/jpeg",
|
|
56
|
+
styles="",
|
|
57
|
+
request="GetMap",
|
|
58
|
+
),
|
|
59
|
+
)
|
|
60
|
+
self.common_fi_req = WMS111FeatureInfoRequest(
|
|
61
|
+
url="/service?",
|
|
62
|
+
param=dict(
|
|
63
|
+
x="10",
|
|
64
|
+
y="20",
|
|
65
|
+
width="200",
|
|
66
|
+
height="200",
|
|
67
|
+
layers="wms_cache",
|
|
68
|
+
format="image/png",
|
|
69
|
+
query_layers="wms_cache",
|
|
70
|
+
styles="",
|
|
71
|
+
bbox="1000,400,2000,1400",
|
|
72
|
+
srs="EPSG:900913",
|
|
73
|
+
),
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
def test_capabilities(self, app):
|
|
77
|
+
req = str(self.common_cap_req) + "&tiled=true"
|
|
78
|
+
resp = app.get(req)
|
|
79
|
+
xml = resp.lxml
|
|
80
|
+
assert validate_with_dtd(xml, dtd_name="wmsc/1.1.1/WMS_MS_Capabilities.dtd")
|
|
81
|
+
srs = set([e.text for e in xml.xpath("//TileSet/SRS")])
|
|
82
|
+
assert srs == set(["EPSG:4326", "EPSG:900913"])
|
|
83
|
+
assert len(xml.xpath("//TileSet")) == 11
|
|
84
|
+
|
|
85
|
+
def test_get_tile(self, app, fixture_cache_data):
|
|
86
|
+
resp = app.get(str(self.common_map_req) + "&tiled=true")
|
|
87
|
+
assert "public" in resp.headers["Cache-Control"]
|
|
88
|
+
assert resp.content_type == "image/jpeg"
|
|
89
|
+
data = BytesIO(resp.body)
|
|
90
|
+
assert is_jpeg(data)
|
|
91
|
+
|
|
92
|
+
def test_get_tile_w_rounded_bbox(self, app, fixture_cache_data):
|
|
93
|
+
self.common_map_req.params.bbox = "-20037400,0.0,0.0,20037400"
|
|
94
|
+
resp = app.get(str(self.common_map_req) + "&tiled=true")
|
|
95
|
+
assert "public" in resp.headers["Cache-Control"]
|
|
96
|
+
assert resp.content_type == "image/jpeg"
|
|
97
|
+
data = BytesIO(resp.body)
|
|
98
|
+
assert is_jpeg(data)
|
|
99
|
+
|
|
100
|
+
def test_get_tile_wrong_bbox(self, app):
|
|
101
|
+
self.common_map_req.params.bbox = "-20037508,0.0,200000.0,20037508"
|
|
102
|
+
resp = app.get(str(self.common_map_req) + "&tiled=true")
|
|
103
|
+
assert_no_cache(resp)
|
|
104
|
+
is_111_exception(resp.lxml, re_msg=".*invalid bbox")
|
|
105
|
+
|
|
106
|
+
def test_get_tile_wrong_fromat(self, app):
|
|
107
|
+
self.common_map_req.params.format = "image/png"
|
|
108
|
+
resp = app.get(str(self.common_map_req) + "&tiled=true")
|
|
109
|
+
assert_no_cache(resp)
|
|
110
|
+
is_111_exception(resp.lxml, re_msg="Invalid request: invalid.*format.*jpeg")
|
|
111
|
+
|
|
112
|
+
def test_get_tile_wrong_size(self, app):
|
|
113
|
+
self.common_map_req.params.size = (256, 255)
|
|
114
|
+
resp = app.get(str(self.common_map_req) + "&tiled=true")
|
|
115
|
+
assert_no_cache(resp)
|
|
116
|
+
is_111_exception(resp.lxml, re_msg="Invalid request: invalid.*size.*256x256")
|