MapProxy 4.0.1__tar.gz → 4.0.2__tar.gz
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-4.0.1 → mapproxy-4.0.2}/CHANGES.txt +9 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/MapProxy.egg-info/PKG-INFO +10 -10
- {mapproxy-4.0.1 → mapproxy-4.0.2}/MapProxy.egg-info/SOURCES.txt +1 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/PKG-INFO +10 -10
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/deployment.rst +2 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config/loader.py +4 -1
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/multiapp.py +2 -1
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/demo.py +62 -54
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/kml.py +2 -1
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/capabilities_demo.html +1 -3
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util_grids.yaml +2 -1
- mapproxy-4.0.2/mapproxy/test/system/test_demo.py +123 -0
- mapproxy-4.0.2/mapproxy/util/escape.py +10 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/wsgiapp.py +2 -1
- {mapproxy-4.0.1 → mapproxy-4.0.2}/setup.py +1 -1
- mapproxy-4.0.1/mapproxy/test/system/test_demo.py +0 -56
- {mapproxy-4.0.1 → mapproxy-4.0.2}/AUTHORS.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/COPYING.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/LICENSE.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/MANIFEST.in +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/MapProxy.egg-info/dependency_links.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/MapProxy.egg-info/entry_points.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/MapProxy.egg-info/not-zip-safe +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/MapProxy.egg-info/requires.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/MapProxy.egg-info/top_level.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/README.md +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/GM.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/_static/logo.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/_static/logo_title.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/_static/mapproxy.css +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/_templates/versions.html +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/auth.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/caches.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/caching_layer_dimensions.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/conf.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/configuration.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/configuration_examples.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/coverages.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/decorate_img.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/development.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/bicubic.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/bilinear.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/labeling-dynamic.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/labeling-meta-buffer.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/labeling-metatiling-buffer.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/labeling-metatiling.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/labeling-no-clip.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/labeling-no-placement.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/labeling-partial-false.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/labeling-repeated.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/mapnik-webmerc-hq.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/mapnik-webmerc.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/mapproxy-demo.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/imgs/nearest.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/index.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/inspire.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/install.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/install_docker.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/install_osgeo4w.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/install_windows.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/labeling.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/mapproxy_util.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/mapproxy_util_autoconfig.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/ogc_api.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/plugins.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/seed.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/services.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/sources.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/tutorial.rst +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/tutorial.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/yaml/cache_conf.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/yaml/grid_conf.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/yaml/merged_conf.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/yaml/meta_conf.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/yaml/seed.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/doc/yaml/simple_conf.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/azureblob.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/base.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/compact.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/couchdb.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/dummy.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/file.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/geopackage.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/legend.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/mbtiles.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/meta.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/path.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/redis.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/renderd.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/s3.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/cache/tile.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/client/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/client/arcgis.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/client/cgi.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/client/http.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/client/log.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/client/tile.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/client/wms.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/compat/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/compat/image.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config/config-schema.json +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config/config.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config/coverage.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config/defaults.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config/spec.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config/validator.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config_template/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config_template/base_config/config.wsgi +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config_template/base_config/full_example.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config_template/base_config/full_seed_example.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config_template/base_config/log.ini +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config_template/base_config/mapproxy.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/config_template/base_config/seed.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/exception.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/featureinfo.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/grid.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/image/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/image/fonts/DejaVuSans.ttf +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/image/fonts/DejaVuSansMono.ttf +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/image/fonts/LICENSE +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/image/fonts/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/image/mask.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/image/merge.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/image/message.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/image/opts.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/image/tile.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/image/transform.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/layer.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/proj.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/request/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/request/arcgis.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/request/base.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/request/tile.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/request/wms/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/request/wms/exception.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/request/wmts.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/response.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/conf/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/conf/app.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/conf/caches.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/conf/geopackage.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/conf/layers.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/conf/seeds.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/conf/sources.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/conf/utils.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/defrag.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/export.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/grids.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/scales.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/util.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/script/wms_capabilities.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/seed/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/seed/cachelock.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/seed/cleanup.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/seed/config.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/seed/script.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/seed/seeder.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/seed/spec.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/seed/util.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/base.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/ows.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/template_helper.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/demo.html +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/openlayers-demo.cfg +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/blank.gif +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/east-mini.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/north-mini.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/south-mini.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/west-mini.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/zoom-minus-mini.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/zoom-plus-mini.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/zoom-world-mini.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/logo.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/ol.css +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/ol.js +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/proj4.min.js +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/proj4defs.js +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/site.css +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/theme/default/framedCloud.css +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/theme/default/google.css +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/theme/default/ie6-style.css +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/theme/default/style.css +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static.html +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/tms_demo.html +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/wms_demo.html +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/demo/wmts_demo.html +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/ows_exception.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/tms_capabilities.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/tms_exception.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/tms_root_resource.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/tms_tilemap_capabilities.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/wms100capabilities.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/wms100exception.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/wms110capabilities.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/wms110exception.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/wms111capabilities.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/wms111exception.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/wms130capabilities.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/wms130exception.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/wmts100capabilities.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/templates/wmts100exception.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/tile.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/wms.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/service/wmts.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/source/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/source/arcgis.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/source/error.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/source/mapnik.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/source/tile.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/source/wms.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/srs.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/template.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/conftest.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/helper.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/http.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/image.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/mocker.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/common.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_bul.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_cze.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dan.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dut.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_eng.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_est.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fin.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fre.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ger.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gle.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gre.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_hun.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ita.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lav.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lit.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_mlt.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_pol.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_por.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_rum.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slo.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slv.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_spa.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_swe.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/network.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/inspire_vs/1.0/inspire_vs.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/kml/2.2.0/ReadMe.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/kml/2.2.0/atom-author-link.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/kml/2.2.0/ogckml22.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/kml/2.2.0/xAL.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/ReadMe.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/ows19115subset.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsAll.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsCommon.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsContents.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsDataIdentification.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsDomainType.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsExceptionReport.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsGetCapabilities.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsGetResourceByID.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsInputOutputData.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsManifest.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsOperationsMetadata.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsServiceIdentification.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsServiceProvider.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/sld/1.1.0/sld_capabilities.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/OGC-exception.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.3.0/ReadMe.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/OGC-exception.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/WMS_MS_Capabilities.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/WMS_exception_1_1_1.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.dtd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/ReadMe.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmts.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsAbstract.wsdl +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_request.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_response.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_request.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_response.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsGetTile_request.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsKVP.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsPayload_response.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/xlink/1.0.0/ReadMe.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/xlink/1.0.0/xlinks.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/schemas/xml.xsd +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/arcgis.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/auth.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache.mbtiles +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_azureblob.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_band_merge.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_bulk_meta_tiles.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_coverage.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_data/wms_cache_EPSG900913/01/000/000/000/000/000/001.jpeg +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_data/wms_cache_transparent_EPSG900913/01/000/000/000/000/000/001.png +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_geopackage.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_grid_names.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_mbtiles.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_s3.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_source.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/combined_sources.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/coverage.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/demo.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/dimension.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/disable_storage.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/empty_ogrdata.geojson +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/formats.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/inspire.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/inspire_full.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/kml_layer.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/layer.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/layergroups.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/layergroups_root.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/legendgraphic.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/mapnik_source.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/mapproxy_export.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/mapserver.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/minimal_cgi.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/mixed_mode.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/multi_cache_layers.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/multiapp1.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/multiapp2.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/renderd_client.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/scalehints.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/seed.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/seed_mapproxy.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/seed_timeouts.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/seed_timeouts_mapproxy.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/seedonly.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/sld.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/source_errors.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/source_errors_raise.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/tileservice_origin.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/tileservice_refresh.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/tilesource_minmax_res.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util-conf-base-grids.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util-conf-overwrite.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util-conf-wms-111-cap.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util_wms_capabilities111.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util_wms_capabilities130.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util_wms_capabilities_service_exception.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/watermark.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/wms_srs_extent.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/wms_versions.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/wmts.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/wmts_dimensions.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/xslt_featureinfo.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/fixture/xslt_featureinfo_input.yaml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_arcgis.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_auth.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_behind_proxy.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_bulk_meta_tiles.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_azureblob.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_band_merge.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_coverage.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_geopackage.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_grid_names.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_mbtiles.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_s3.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_source.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_combined_sources.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_coverage.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_decorate_img.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_demo_with_extra_service.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_dimensions.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_disable_storage.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_formats.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_inspire_vs.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_kml.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_layergroups.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_legendgraphic.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_mapnik.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_mapserver.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_mixed_mode_format.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_multi_cache_layers.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_multiapp.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_refresh.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_renderd_client.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_response_headers.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_scalehints.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_seed.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_seed_only.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_sld.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_source_errors.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_tilesource_minmax_res.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_tms.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_tms_origin.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_util_conf.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_util_export.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_util_grids.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_util_wms_capabilities.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_watermark.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_wms.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_wms_srs_extent.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_wms_version.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_wmsc.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_wmts.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_wmts_dimensions.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_wmts_restful.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/system/test_xslt_featureinfo.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/test_http_helper.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/epsg +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/polygons/polygons.dbf +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/polygons/polygons.shp +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/polygons/polygons.shx +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_async.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_auth.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_azureblob.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_compact.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_couchdb.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_geopackage.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_mbtile.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_redis.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_s3.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_tile.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_client.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_client_arcgis.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_client_cgi.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_collections.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_concat_legends.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_conf_loader.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_conf_validator.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_config.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_decorate_img.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_exceptions.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_featureinfo.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_file_lock_load.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_fs.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_geom.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_grid.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_image.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_image_mask.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_image_messages.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_image_options.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_isodate.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_multiapp.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_ogr_reader.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_request.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_request_wmts.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_response.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_seed.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_seed_cachelock.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_srs.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_tiled_source.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_tilefilter.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_times.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_timeutils.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_util_conf_utils.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_utils.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_wms_capabilities.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_wms_layer.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/test/unit/test_yaml.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/tilefilter.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/async_.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/collections.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/coverage.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/dictspec/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/dictspec/spec.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/dictspec/test/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/dictspec/test/test_validator.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/dictspec/validator.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/local.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/lockfile.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/odict.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/serving.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/tempita/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/tempita/_looper.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/tempita/string_utils.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/duration.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/parse.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/__init__.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/test_parse.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/test_util.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/wms-example-111.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/wms-example-130.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/wms-large-111.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/util.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/fs.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/geom.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/lib.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/lock.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/ogr.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/py.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/times.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/util/yaml.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/mapproxy/version.py +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/pyproject.toml +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/requirements-tests.txt +0 -0
- {mapproxy-4.0.1 → mapproxy-4.0.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: MapProxy
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.2
|
|
4
4
|
Summary: An accelerating proxy for tile and web map services
|
|
5
5
|
Home-page: https://mapproxy.org
|
|
6
6
|
Author: Oliver Tonnhofer
|
|
@@ -53,6 +53,15 @@ The documentation is available at: http://mapproxy.github.io/mapproxy/latest/
|
|
|
53
53
|
|
|
54
54
|
Changes
|
|
55
55
|
-------
|
|
56
|
+
4.0.2 2025-04-10
|
|
57
|
+
~~~~~~~~~~~~~~~~
|
|
58
|
+
|
|
59
|
+
Fixes:
|
|
60
|
+
|
|
61
|
+
- Security fix to prevent XSS injections in demo pages
|
|
62
|
+
- Security fix to prevent reading file urls
|
|
63
|
+
|
|
64
|
+
|
|
56
65
|
4.0.1 2025-03-25
|
|
57
66
|
~~~~~~~~~~~~~~~~
|
|
58
67
|
|
|
@@ -155,15 +164,6 @@ Fixes:
|
|
|
155
164
|
- Fix transparency in TMS demo page.
|
|
156
165
|
|
|
157
166
|
|
|
158
|
-
3.0.1 2024-08-27
|
|
159
|
-
~~~~~~~~~~~~~~~~
|
|
160
|
-
|
|
161
|
-
Fixes:
|
|
162
|
-
|
|
163
|
-
- Fix capabilities links in demo page and config template
|
|
164
|
-
- Trivy report format
|
|
165
|
-
|
|
166
|
-
|
|
167
167
|
|
|
168
168
|
Older changes
|
|
169
169
|
-------------
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: MapProxy
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.2
|
|
4
4
|
Summary: An accelerating proxy for tile and web map services
|
|
5
5
|
Home-page: https://mapproxy.org
|
|
6
6
|
Author: Oliver Tonnhofer
|
|
@@ -53,6 +53,15 @@ The documentation is available at: http://mapproxy.github.io/mapproxy/latest/
|
|
|
53
53
|
|
|
54
54
|
Changes
|
|
55
55
|
-------
|
|
56
|
+
4.0.2 2025-04-10
|
|
57
|
+
~~~~~~~~~~~~~~~~
|
|
58
|
+
|
|
59
|
+
Fixes:
|
|
60
|
+
|
|
61
|
+
- Security fix to prevent XSS injections in demo pages
|
|
62
|
+
- Security fix to prevent reading file urls
|
|
63
|
+
|
|
64
|
+
|
|
56
65
|
4.0.1 2025-03-25
|
|
57
66
|
~~~~~~~~~~~~~~~~
|
|
58
67
|
|
|
@@ -155,15 +164,6 @@ Fixes:
|
|
|
155
164
|
- Fix transparency in TMS demo page.
|
|
156
165
|
|
|
157
166
|
|
|
158
|
-
3.0.1 2024-08-27
|
|
159
|
-
~~~~~~~~~~~~~~~~
|
|
160
|
-
|
|
161
|
-
Fixes:
|
|
162
|
-
|
|
163
|
-
- Fix capabilities links in demo page and config template
|
|
164
|
-
- Trivy report format
|
|
165
|
-
|
|
166
|
-
|
|
167
167
|
|
|
168
168
|
Older changes
|
|
169
169
|
-------------
|
|
@@ -49,6 +49,8 @@ Behind an HTTP server or proxy
|
|
|
49
49
|
|
|
50
50
|
Both approaches require a configuration that maps your MapProxy configuration with the MapProxy application. You can write a small script file for that.
|
|
51
51
|
|
|
52
|
+
.. note:: In production mode it is recommended to disable the demo service.
|
|
53
|
+
|
|
52
54
|
.. _server_script:
|
|
53
55
|
|
|
54
56
|
Server script
|
|
@@ -2159,7 +2159,6 @@ class ServiceConfiguration(ConfigurationBase):
|
|
|
2159
2159
|
creator = getattr(self, service_name + '_service', None)
|
|
2160
2160
|
if not creator:
|
|
2161
2161
|
# If not a known service, try to use the plugin mechanism
|
|
2162
|
-
global plugin_services
|
|
2163
2162
|
creator = plugin_services.get(service_name, None)
|
|
2164
2163
|
if not creator:
|
|
2165
2164
|
raise ValueError('unknown service: %s' % service_name)
|
|
@@ -2409,6 +2408,10 @@ def load_configuration(mapproxy_conf, seed=False, ignore_warnings=True, renderd=
|
|
|
2409
2408
|
for error in errors:
|
|
2410
2409
|
log.warning(error)
|
|
2411
2410
|
|
|
2411
|
+
services = conf_dict.get('services')
|
|
2412
|
+
if services is not None and 'demo' in services:
|
|
2413
|
+
log.warning('Application has demo page enabled. It is recommended to disable this in production.')
|
|
2414
|
+
|
|
2412
2415
|
return ProxyConfiguration(conf_dict, conf_base_dir=conf_base_dir, seed=seed,
|
|
2413
2416
|
renderd=renderd)
|
|
2414
2417
|
|
|
@@ -20,6 +20,7 @@ from mapproxy.request import Request
|
|
|
20
20
|
from mapproxy.response import Response
|
|
21
21
|
from mapproxy.util.collections import LRU
|
|
22
22
|
from mapproxy.wsgiapp import make_wsgi_app as make_mapproxy_wsgi_app
|
|
23
|
+
from mapproxy.util.escape import escape_html
|
|
23
24
|
|
|
24
25
|
from threading import Lock
|
|
25
26
|
|
|
@@ -95,7 +96,7 @@ class MultiMapProxy(object):
|
|
|
95
96
|
import mapproxy.version
|
|
96
97
|
html = "<html><body><h1>Welcome to MapProxy %s</h1>" % mapproxy.version.version
|
|
97
98
|
|
|
98
|
-
url = req.script_url
|
|
99
|
+
url = escape_html(req.script_url)
|
|
99
100
|
if self.list_apps:
|
|
100
101
|
html += "<h2>available instances:</h2><ul>"
|
|
101
102
|
html += '\n'.join('<li><a href="%(url)s/%(name)s/">%(name)s</a></li>' % {'url': url, 'name': app}
|
|
@@ -18,6 +18,9 @@ Demo service handler
|
|
|
18
18
|
"""
|
|
19
19
|
from __future__ import division
|
|
20
20
|
|
|
21
|
+
import logging
|
|
22
|
+
import re
|
|
23
|
+
|
|
21
24
|
try:
|
|
22
25
|
import importlib_resources
|
|
23
26
|
except ImportError:
|
|
@@ -30,10 +33,12 @@ from mapproxy.config.config import base_config
|
|
|
30
33
|
from mapproxy.util.ext.odict import odict
|
|
31
34
|
from mapproxy.exception import RequestError
|
|
32
35
|
from mapproxy.service.base import Server
|
|
36
|
+
from mapproxy.request.base import Request
|
|
33
37
|
from mapproxy.response import Response
|
|
34
38
|
from mapproxy.srs import SRS, get_epsg_num
|
|
35
39
|
from mapproxy.layer import SRSConditional, CacheMapLayer, ResolutionConditional
|
|
36
40
|
from mapproxy.source.wms import WMSSource
|
|
41
|
+
from mapproxy.util.escape import escape_html
|
|
37
42
|
|
|
38
43
|
from urllib import request as urllib2
|
|
39
44
|
|
|
@@ -44,6 +49,8 @@ get_template = template_loader(__package__, 'templates', namespace=env)
|
|
|
44
49
|
# Used by plugins
|
|
45
50
|
extra_demo_server_handlers = set()
|
|
46
51
|
|
|
52
|
+
logger = logging.getLogger("demo")
|
|
53
|
+
|
|
47
54
|
|
|
48
55
|
def register_extra_demo_server_handler(handler):
|
|
49
56
|
""" Method used by plugins to register a new handler for the demo service.
|
|
@@ -106,7 +113,29 @@ class DemoServer(Server):
|
|
|
106
113
|
self.restful_template = restful_template
|
|
107
114
|
self.background = background
|
|
108
115
|
|
|
109
|
-
|
|
116
|
+
@staticmethod
|
|
117
|
+
def get_capabilities_url(service_path: str, req: Request) -> str:
|
|
118
|
+
if 'type' in req.args and req.args['type'] == 'external':
|
|
119
|
+
url = escape_html(req.script_url) + service_path
|
|
120
|
+
else:
|
|
121
|
+
url = req.server_script_url + service_path
|
|
122
|
+
return url
|
|
123
|
+
|
|
124
|
+
@staticmethod
|
|
125
|
+
def valid_url(url: str) -> bool:
|
|
126
|
+
pattern = re.compile("^https?://")
|
|
127
|
+
if pattern.match(url):
|
|
128
|
+
return True
|
|
129
|
+
else:
|
|
130
|
+
logging.warn(f"A request was blocked that was trying to access a non-http resource: {url}")
|
|
131
|
+
return False
|
|
132
|
+
|
|
133
|
+
@staticmethod
|
|
134
|
+
def read_capabilities(url: str) -> str:
|
|
135
|
+
resp = urllib2.urlopen(url)
|
|
136
|
+
return escape_html(resp.read().decode())
|
|
137
|
+
|
|
138
|
+
def handle(self, req: Request):
|
|
110
139
|
if req.path.startswith('/demo/static/'):
|
|
111
140
|
if '..' in req.path:
|
|
112
141
|
return Response('file not found', content_type='text/plain', status=404)
|
|
@@ -138,56 +167,47 @@ class DemoServer(Server):
|
|
|
138
167
|
elif 'wmts_layer' in req.args:
|
|
139
168
|
demo = self._render_wmts_template('demo/wmts_demo.html', req)
|
|
140
169
|
elif 'wms_capabilities' in req.args:
|
|
141
|
-
|
|
142
|
-
if
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
url = internal_url
|
|
146
|
-
capabilities = urllib2.urlopen(url)
|
|
170
|
+
url = self.get_capabilities_url('/service?REQUEST=GetCapabilities&SERVICE=WMS', req)
|
|
171
|
+
if not self.valid_url(url):
|
|
172
|
+
return Response('bad request', content_type='text/plain', status=400)
|
|
173
|
+
capabilities = self.read_capabilities(url)
|
|
147
174
|
demo = self._render_capabilities_template('demo/capabilities_demo.html', capabilities, 'WMS', url)
|
|
148
175
|
elif 'wmsc_capabilities' in req.args:
|
|
149
|
-
|
|
150
|
-
if
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
url = internal_url
|
|
154
|
-
capabilities = urllib2.urlopen(url)
|
|
176
|
+
url = self.get_capabilities_url('/service?REQUEST=GetCapabilities&SERVICE=WMS&tiled=true', req)
|
|
177
|
+
if not self.valid_url(url):
|
|
178
|
+
return Response('bad request', content_type='text/plain', status=400)
|
|
179
|
+
capabilities = self.read_capabilities(url)
|
|
155
180
|
demo = self._render_capabilities_template('demo/capabilities_demo.html', capabilities, 'WMS-C', url)
|
|
156
181
|
elif 'wmts_capabilities_kvp' in req.args:
|
|
157
|
-
|
|
158
|
-
if
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
url = internal_url
|
|
162
|
-
capabilities = urllib2.urlopen(url)
|
|
182
|
+
url = self.get_capabilities_url('/service?REQUEST=GetCapabilities&SERVICE=WMTS', req)
|
|
183
|
+
if not self.valid_url(url):
|
|
184
|
+
return Response('bad request', content_type='text/plain', status=400)
|
|
185
|
+
capabilities = self.read_capabilities(url)
|
|
163
186
|
demo = self._render_capabilities_template('demo/capabilities_demo.html', capabilities, 'WMTS', url)
|
|
164
187
|
elif 'wmts_capabilities' in req.args:
|
|
165
|
-
|
|
166
|
-
if
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
url = internal_url
|
|
170
|
-
capabilities = urllib2.urlopen(url)
|
|
188
|
+
url = self.get_capabilities_url('/wmts/1.0.0/WMTSCapabilities.xml', req)
|
|
189
|
+
if not self.valid_url(url):
|
|
190
|
+
return Response('bad request', content_type='text/plain', status=400)
|
|
191
|
+
capabilities = self.read_capabilities(url)
|
|
171
192
|
demo = self._render_capabilities_template('demo/capabilities_demo.html', capabilities, 'WMTS', url)
|
|
172
193
|
elif 'tms_capabilities' in req.args:
|
|
173
194
|
if 'layer' in req.args and 'srs' in req.args:
|
|
174
|
-
# prevent dir traversal (seems it's not possible with urllib2, but better safe
|
|
175
|
-
layer = req.args['layer'].replace('..', '')
|
|
176
|
-
srs = req.args['srs'].replace('..', '')
|
|
177
|
-
|
|
178
|
-
else:
|
|
179
|
-
internal_url = '%s/tms/1.0.0/' % (req.server_script_url)
|
|
180
|
-
if 'type' in req.args and req.args['type'] == 'external':
|
|
181
|
-
url = internal_url.replace(req.server_script_url, req.script_url)
|
|
195
|
+
# prevent dir traversal (seems it's not possible with urllib2, but better safe than sorry)
|
|
196
|
+
layer = escape_html(req.args['layer'].replace('..', ''))
|
|
197
|
+
srs = escape_html(req.args['srs'].replace('..', ''))
|
|
198
|
+
service_path = f'/tms/1.0.0/{layer}/{srs}'
|
|
182
199
|
else:
|
|
183
|
-
|
|
184
|
-
|
|
200
|
+
service_path = '/tms/1.0.0/'
|
|
201
|
+
url = self.get_capabilities_url(service_path, req)
|
|
202
|
+
if not self.valid_url(url):
|
|
203
|
+
return Response('bad request', content_type='text/plain', status=400)
|
|
204
|
+
capabilities = self.read_capabilities(url)
|
|
185
205
|
demo = self._render_capabilities_template('demo/capabilities_demo.html', capabilities, 'TMS', url)
|
|
186
206
|
elif req.path == '/demo/':
|
|
187
207
|
demo = self._render_template(req, 'demo/demo.html')
|
|
188
208
|
else:
|
|
189
209
|
resp = Response('', status=301)
|
|
190
|
-
resp.headers['Location'] = req.script_url.rstrip('/') + '/demo/'
|
|
210
|
+
resp.headers['Location'] = escape_html(req.script_url).rstrip('/') + '/demo/'
|
|
191
211
|
return resp
|
|
192
212
|
return Response(demo, content_type='text/html')
|
|
193
213
|
|
|
@@ -258,7 +278,7 @@ class DemoServer(Server):
|
|
|
258
278
|
def _render_wms_template(self, template, req):
|
|
259
279
|
template = get_template(template, default_inherit="demo/static.html")
|
|
260
280
|
layer = self.layers[req.args['wms_layer']]
|
|
261
|
-
srs =
|
|
281
|
+
srs = escape_html(req.args['srs'])
|
|
262
282
|
bbox = layer.extent.bbox_for(SRS(srs))
|
|
263
283
|
width = bbox[2] - bbox[0]
|
|
264
284
|
height = bbox[3] - bbox[1]
|
|
@@ -268,7 +288,7 @@ class DemoServer(Server):
|
|
|
268
288
|
background_url = self.background["url"]
|
|
269
289
|
return template.substitute(layer=layer,
|
|
270
290
|
image_formats=self.image_formats,
|
|
271
|
-
format=
|
|
291
|
+
format=escape_html(req.args['format']),
|
|
272
292
|
srs=srs,
|
|
273
293
|
layer_srs=self.layer_srs,
|
|
274
294
|
bbox=bbox,
|
|
@@ -301,8 +321,8 @@ class DemoServer(Server):
|
|
|
301
321
|
if self.background:
|
|
302
322
|
background_url = self.background["url"]
|
|
303
323
|
return template.substitute(layer=tile_layer,
|
|
304
|
-
srs=
|
|
305
|
-
format=
|
|
324
|
+
srs=escape_html(req.args['srs']),
|
|
325
|
+
format=escape_html(req.args['format']),
|
|
306
326
|
resolutions=res,
|
|
307
327
|
units=units,
|
|
308
328
|
add_res_to_options=add_res_to_options,
|
|
@@ -332,8 +352,8 @@ class DemoServer(Server):
|
|
|
332
352
|
background_url = self.background["url"]
|
|
333
353
|
return template.substitute(layer=wmts_layer,
|
|
334
354
|
matrix_set=wmts_layer.grid.name,
|
|
335
|
-
format=
|
|
336
|
-
srs=
|
|
355
|
+
format=escape_html(req.args['format']),
|
|
356
|
+
srs=escape_html(req.args['srs']),
|
|
337
357
|
resolutions=wmts_layer.grid.resolutions,
|
|
338
358
|
units=units,
|
|
339
359
|
all_tile_layers=self.tile_layers,
|
|
@@ -356,15 +376,3 @@ class DemoServer(Server):
|
|
|
356
376
|
return True
|
|
357
377
|
return False
|
|
358
378
|
return True
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
def escape(data):
|
|
362
|
-
"""
|
|
363
|
-
Escape user-provided input data for safe inclusion in HTML _and_ JS to prevent XSS.
|
|
364
|
-
"""
|
|
365
|
-
data = data.replace('&', '&')
|
|
366
|
-
data = data.replace('>', '>')
|
|
367
|
-
data = data.replace('<', '<')
|
|
368
|
-
data = data.replace("'", '')
|
|
369
|
-
data = data.replace('"', '')
|
|
370
|
-
return data
|
|
@@ -21,6 +21,7 @@ from mapproxy.service.base import Server
|
|
|
21
21
|
from mapproxy.request.tile import TileRequest
|
|
22
22
|
from mapproxy.srs import SRS
|
|
23
23
|
from mapproxy.util.coverage import load_limited_to
|
|
24
|
+
from mapproxy.util.escape import escape_html
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
class KMLRequest(TileRequest):
|
|
@@ -182,7 +183,7 @@ class KMLServer(Server):
|
|
|
182
183
|
|
|
183
184
|
subtiles = self._get_subtiles(map_request, layer)
|
|
184
185
|
tile_size = layer.grid.tile_size[0]
|
|
185
|
-
url = map_request.http.script_url.rstrip('/')
|
|
186
|
+
url = escape_html(map_request.http.script_url.rstrip('/'))
|
|
186
187
|
result = KMLRenderer().render(
|
|
187
188
|
tile=tile, subtiles=subtiles, layer=layer, url=url, name=map_request.layer, format=layer.format,
|
|
188
189
|
name_path=layer.md['name_path'], initial_level=initial_level, tile_size=tile_size)
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# This file is part of the MapProxy project.
|
|
2
|
+
# Copyright (C) 2022 Even Rouault
|
|
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 re
|
|
17
|
+
import pytest
|
|
18
|
+
|
|
19
|
+
from mapproxy.test.http import mock_httpd
|
|
20
|
+
from mapproxy.test.system import SysTest
|
|
21
|
+
from webtest import AppError
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@pytest.fixture(scope="module")
|
|
25
|
+
def config_file():
|
|
26
|
+
return "demo.yaml"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class TestDemo(SysTest):
|
|
30
|
+
|
|
31
|
+
def test_basic(self, app):
|
|
32
|
+
resp = app.get("/demo/", status=200)
|
|
33
|
+
assert resp.content_type == "text/html"
|
|
34
|
+
assert 'href="../service?REQUEST=GetCapabilities&SERVICE=WMS"' in resp
|
|
35
|
+
assert 'href="../service?REQUEST=GetCapabilities&SERVICE=WMS&tiled=true"' in resp
|
|
36
|
+
assert 'href="../demo/?wmts_layer=wms_cache&format=jpeg&srs=EPSG%3A900913"' in resp
|
|
37
|
+
assert 'href="../demo/?tms_layer=wms_cache&format=jpeg&srs=EPSG%3A900913"' in resp
|
|
38
|
+
|
|
39
|
+
def test_previewmap(self, app):
|
|
40
|
+
resp = app.get("/demo/?srs=EPSG%3A3857&format=image%2Fpng&wms_layer=wms_cache", status=200)
|
|
41
|
+
assert resp.content_type == "text/html"
|
|
42
|
+
assert '<h2>Layer Preview - wms_cache</h2>' in resp
|
|
43
|
+
|
|
44
|
+
def test_layers_sorted_by_name(self, app):
|
|
45
|
+
resp = app.get("/demo/", status=200)
|
|
46
|
+
|
|
47
|
+
patternTable = re.compile(r'<table class="code">.*?</table>', re.DOTALL)
|
|
48
|
+
patternWMS = r'<td\s+rowspan="2">([\w\d-]+)</td>'
|
|
49
|
+
patternWMTS_TBS = r'<td\s+rowspan="1">([\w\d-]+)</td>'
|
|
50
|
+
tables = patternTable.findall(resp.text)
|
|
51
|
+
|
|
52
|
+
layersWMS = re.findall(patternWMS, resp.text, re.IGNORECASE)
|
|
53
|
+
layersWMTS = re.findall(patternWMTS_TBS, tables[1], re.IGNORECASE)
|
|
54
|
+
layersTBS = re.findall(patternWMTS_TBS, tables[2], re.IGNORECASE)
|
|
55
|
+
|
|
56
|
+
assert layersWMS == sorted(layersWMS)
|
|
57
|
+
assert layersWMTS == sorted(layersWMTS)
|
|
58
|
+
assert layersTBS == sorted(layersTBS)
|
|
59
|
+
|
|
60
|
+
def test_external(self, app):
|
|
61
|
+
expected_req = (
|
|
62
|
+
{
|
|
63
|
+
"path": r"/path/service?REQUEST=GetCapabilities&SERVICE=WMS"
|
|
64
|
+
},
|
|
65
|
+
{"body": b"test-string", "headers": {"content-type": "text/xml"}}
|
|
66
|
+
)
|
|
67
|
+
with mock_httpd(
|
|
68
|
+
("localhost", 42423), [expected_req]
|
|
69
|
+
):
|
|
70
|
+
resp = app.get('/demo/?wms_capabilities&type=external', extra_environ={
|
|
71
|
+
'HTTP_X_FORWARDED_HOST': 'localhost:42423/path'
|
|
72
|
+
})
|
|
73
|
+
content = resp.text
|
|
74
|
+
assert 'test-string' in content
|
|
75
|
+
assert 'http://localhost:42423/path/service?REQUEST=GetCapabilities&SERVICE=WMS' in content
|
|
76
|
+
|
|
77
|
+
def test_external_xss_injection(self, app):
|
|
78
|
+
expected_req = (
|
|
79
|
+
{
|
|
80
|
+
"path": r"/path/><script>alert(XSS)</script>/service?REQUEST=GetCapabilities&SERVICE=WMS"
|
|
81
|
+
},
|
|
82
|
+
{"body": b"test-string", "headers": {"content-type": "text/xml"}}
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
with mock_httpd(
|
|
86
|
+
("localhost", 42423), [expected_req]
|
|
87
|
+
):
|
|
88
|
+
resp = app.get('/demo/?wms_capabilities&type=external', extra_environ={
|
|
89
|
+
'HTTP_X_FORWARDED_HOST': 'localhost:42423/path/"><script>alert(\'XSS\')</script>'
|
|
90
|
+
})
|
|
91
|
+
content = resp.text
|
|
92
|
+
assert 'test-string' in content
|
|
93
|
+
assert '"><script>alert(\'XSS\')' not in content
|
|
94
|
+
assert '><script>alert(XSS)</script>' in content
|
|
95
|
+
|
|
96
|
+
def test_external_file_protocol(self, app):
|
|
97
|
+
try:
|
|
98
|
+
app.get('/demo/?wms_capabilities&type=external', extra_environ={
|
|
99
|
+
'HTTP_X_FORWARDED_PROTO': 'file'
|
|
100
|
+
})
|
|
101
|
+
except AppError as e:
|
|
102
|
+
assert '400 Bad Request' in e.args[0]
|
|
103
|
+
|
|
104
|
+
def test_tms_layer_xss(self, app):
|
|
105
|
+
expected_req = (
|
|
106
|
+
{
|
|
107
|
+
"path": r"/tms/1.0.0/osm><script>alert(XSS)</script>/1.0.0"
|
|
108
|
+
},
|
|
109
|
+
{"body": b"test-string", "headers": {"content-type": "text/xml"}}
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
with mock_httpd(
|
|
113
|
+
("localhost", 42423), [expected_req]
|
|
114
|
+
):
|
|
115
|
+
resp = app.get(
|
|
116
|
+
'/demo/?tms_capabilities&layer=osm"><script>alert(\'XSS\')</script>&type=external&srs=1.0.0',
|
|
117
|
+
extra_environ={
|
|
118
|
+
'HTTP_X_FORWARDED_HOST': 'localhost:42423'
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
content = resp.text
|
|
122
|
+
assert '"><script>alert(\'XSS\')' not in content
|
|
123
|
+
assert '><script>alert(XSS)</script>' in content
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
def escape_html(data):
|
|
2
|
+
"""
|
|
3
|
+
Escape user-provided input data for safe inclusion in HTML _and_ JS to prevent XSS.
|
|
4
|
+
"""
|
|
5
|
+
data = data.replace('&', '&')
|
|
6
|
+
data = data.replace('>', '>')
|
|
7
|
+
data = data.replace('<', '<')
|
|
8
|
+
data = data.replace("'", '')
|
|
9
|
+
data = data.replace('"', '')
|
|
10
|
+
return data
|
|
@@ -34,6 +34,7 @@ from mapproxy.request import Request
|
|
|
34
34
|
from mapproxy.response import Response
|
|
35
35
|
from mapproxy.config import local_base_config
|
|
36
36
|
from mapproxy.config.loader import load_configuration, ConfigurationError
|
|
37
|
+
from mapproxy.util.escape import escape_html
|
|
37
38
|
|
|
38
39
|
log = logging.getLogger('mapproxy.config')
|
|
39
40
|
log_wsgiapp = logging.getLogger('mapproxy.wsgiapp')
|
|
@@ -164,7 +165,7 @@ class MapProxyApp(object):
|
|
|
164
165
|
resp = Response('internal error', status=500)
|
|
165
166
|
if resp is None:
|
|
166
167
|
if req.path in ('', '/'):
|
|
167
|
-
resp = self.welcome_response(req.script_url)
|
|
168
|
+
resp = self.welcome_response(escape_html(req.script_url))
|
|
168
169
|
else:
|
|
169
170
|
resp = Response('not found', mimetype='text/plain', status=404)
|
|
170
171
|
return resp(environ, start_response)
|
|
@@ -62,7 +62,7 @@ def long_description(changelog_releases=10):
|
|
|
62
62
|
|
|
63
63
|
setup(
|
|
64
64
|
name='MapProxy',
|
|
65
|
-
version="4.0.
|
|
65
|
+
version="4.0.2",
|
|
66
66
|
description='An accelerating proxy for tile and web map services',
|
|
67
67
|
long_description=long_description(7),
|
|
68
68
|
long_description_content_type='text/x-rst',
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# This file is part of the MapProxy project.
|
|
2
|
-
# Copyright (C) 2022 Even Rouault
|
|
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 re
|
|
17
|
-
import pytest
|
|
18
|
-
|
|
19
|
-
from mapproxy.test.system import SysTest
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
@pytest.fixture(scope="module")
|
|
23
|
-
def config_file():
|
|
24
|
-
return "demo.yaml"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class TestDemo(SysTest):
|
|
28
|
-
|
|
29
|
-
def test_basic(self, app):
|
|
30
|
-
resp = app.get("/demo/", status=200)
|
|
31
|
-
assert resp.content_type == "text/html"
|
|
32
|
-
assert 'href="../service?REQUEST=GetCapabilities&SERVICE=WMS"' in resp
|
|
33
|
-
assert 'href="../service?REQUEST=GetCapabilities&SERVICE=WMS&tiled=true"' in resp
|
|
34
|
-
assert 'href="../demo/?wmts_layer=wms_cache&format=jpeg&srs=EPSG%3A900913"' in resp
|
|
35
|
-
assert 'href="../demo/?tms_layer=wms_cache&format=jpeg&srs=EPSG%3A900913"' in resp
|
|
36
|
-
|
|
37
|
-
def test_previewmap(self, app):
|
|
38
|
-
resp = app.get("/demo/?srs=EPSG%3A3857&format=image%2Fpng&wms_layer=wms_cache", status=200)
|
|
39
|
-
assert resp.content_type == "text/html"
|
|
40
|
-
assert '<h2>Layer Preview - wms_cache</h2>' in resp
|
|
41
|
-
|
|
42
|
-
def test_layers_sorted_by_name(self, app):
|
|
43
|
-
resp = app.get("/demo/", status=200)
|
|
44
|
-
|
|
45
|
-
patternTable = re.compile(r'<table class="code">.*?</table>', re.DOTALL)
|
|
46
|
-
patternWMS = r'<td\s+rowspan="2">([\w\d-]+)</td>'
|
|
47
|
-
patternWMTS_TBS = r'<td\s+rowspan="1">([\w\d-]+)</td>'
|
|
48
|
-
tables = patternTable.findall(resp.text)
|
|
49
|
-
|
|
50
|
-
layersWMS = re.findall(patternWMS, resp.text, re.IGNORECASE)
|
|
51
|
-
layersWMTS = re.findall(patternWMTS_TBS, tables[1], re.IGNORECASE)
|
|
52
|
-
layersTBS = re.findall(patternWMTS_TBS, tables[2], re.IGNORECASE)
|
|
53
|
-
|
|
54
|
-
assert layersWMS == sorted(layersWMS)
|
|
55
|
-
assert layersWMTS == sorted(layersWMTS)
|
|
56
|
-
assert layersTBS == sorted(layersTBS)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|