MapProxy 4.0.0__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.
Files changed (522) hide show
  1. {mapproxy-4.0.0 → mapproxy-4.0.2}/CHANGES.txt +21 -0
  2. {mapproxy-4.0.0 → mapproxy-4.0.2}/MapProxy.egg-info/PKG-INFO +22 -33
  3. {mapproxy-4.0.0 → mapproxy-4.0.2}/MapProxy.egg-info/SOURCES.txt +2 -0
  4. {mapproxy-4.0.0 → mapproxy-4.0.2}/PKG-INFO +22 -33
  5. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/deployment.rst +2 -0
  6. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/index.rst +1 -0
  7. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/install_docker.rst +8 -11
  8. mapproxy-4.0.2/doc/ogc_api.rst +12 -0
  9. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config/loader.py +6 -6
  10. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/multiapp.py +2 -1
  11. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/demo.py +65 -54
  12. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/kml.py +2 -1
  13. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/capabilities_demo.html +1 -3
  14. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/wmts_demo.html +2 -1
  15. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/wmts.py +2 -2
  16. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util_grids.yaml +2 -1
  17. mapproxy-4.0.2/mapproxy/test/system/test_demo.py +123 -0
  18. mapproxy-4.0.2/mapproxy/util/escape.py +10 -0
  19. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/wsgiapp.py +2 -1
  20. {mapproxy-4.0.0 → mapproxy-4.0.2}/setup.py +1 -1
  21. mapproxy-4.0.0/mapproxy/test/system/test_demo.py +0 -56
  22. {mapproxy-4.0.0 → mapproxy-4.0.2}/AUTHORS.txt +0 -0
  23. {mapproxy-4.0.0 → mapproxy-4.0.2}/COPYING.txt +0 -0
  24. {mapproxy-4.0.0 → mapproxy-4.0.2}/LICENSE.txt +0 -0
  25. {mapproxy-4.0.0 → mapproxy-4.0.2}/MANIFEST.in +0 -0
  26. {mapproxy-4.0.0 → mapproxy-4.0.2}/MapProxy.egg-info/dependency_links.txt +0 -0
  27. {mapproxy-4.0.0 → mapproxy-4.0.2}/MapProxy.egg-info/entry_points.txt +0 -0
  28. {mapproxy-4.0.0 → mapproxy-4.0.2}/MapProxy.egg-info/not-zip-safe +0 -0
  29. {mapproxy-4.0.0 → mapproxy-4.0.2}/MapProxy.egg-info/requires.txt +0 -0
  30. {mapproxy-4.0.0 → mapproxy-4.0.2}/MapProxy.egg-info/top_level.txt +0 -0
  31. {mapproxy-4.0.0 → mapproxy-4.0.2}/README.md +0 -0
  32. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/GM.txt +0 -0
  33. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/_static/logo.png +0 -0
  34. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/_static/logo_title.png +0 -0
  35. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/_static/mapproxy.css +0 -0
  36. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/_templates/versions.html +0 -0
  37. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/auth.rst +0 -0
  38. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/caches.rst +0 -0
  39. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/caching_layer_dimensions.rst +0 -0
  40. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/conf.py +0 -0
  41. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/configuration.rst +0 -0
  42. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/configuration_examples.rst +0 -0
  43. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/coverages.rst +0 -0
  44. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/decorate_img.rst +0 -0
  45. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/development.rst +0 -0
  46. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/bicubic.png +0 -0
  47. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/bilinear.png +0 -0
  48. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/labeling-dynamic.png +0 -0
  49. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/labeling-meta-buffer.png +0 -0
  50. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/labeling-metatiling-buffer.png +0 -0
  51. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/labeling-metatiling.png +0 -0
  52. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/labeling-no-clip.png +0 -0
  53. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/labeling-no-placement.png +0 -0
  54. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/labeling-partial-false.png +0 -0
  55. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/labeling-repeated.png +0 -0
  56. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/mapnik-webmerc-hq.png +0 -0
  57. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/mapnik-webmerc.png +0 -0
  58. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/mapproxy-demo.png +0 -0
  59. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/imgs/nearest.png +0 -0
  60. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/inspire.rst +0 -0
  61. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/install.rst +0 -0
  62. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/install_osgeo4w.rst +0 -0
  63. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/install_windows.rst +0 -0
  64. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/labeling.rst +0 -0
  65. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/mapproxy_util.rst +0 -0
  66. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/mapproxy_util_autoconfig.rst +0 -0
  67. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/plugins.rst +0 -0
  68. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/seed.rst +0 -0
  69. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/services.rst +0 -0
  70. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/sources.rst +0 -0
  71. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/tutorial.rst +0 -0
  72. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/tutorial.yaml +0 -0
  73. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/yaml/cache_conf.yaml +0 -0
  74. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/yaml/grid_conf.yaml +0 -0
  75. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/yaml/merged_conf.yaml +0 -0
  76. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/yaml/meta_conf.yaml +0 -0
  77. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/yaml/seed.yaml +0 -0
  78. {mapproxy-4.0.0 → mapproxy-4.0.2}/doc/yaml/simple_conf.yaml +0 -0
  79. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/__init__.py +0 -0
  80. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/__init__.py +0 -0
  81. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/azureblob.py +0 -0
  82. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/base.py +0 -0
  83. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/compact.py +0 -0
  84. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/couchdb.py +0 -0
  85. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/dummy.py +0 -0
  86. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/file.py +0 -0
  87. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/geopackage.py +0 -0
  88. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/legend.py +0 -0
  89. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/mbtiles.py +0 -0
  90. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/meta.py +0 -0
  91. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/path.py +0 -0
  92. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/redis.py +0 -0
  93. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/renderd.py +0 -0
  94. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/s3.py +0 -0
  95. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/cache/tile.py +0 -0
  96. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/client/__init__.py +0 -0
  97. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/client/arcgis.py +0 -0
  98. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/client/cgi.py +0 -0
  99. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/client/http.py +0 -0
  100. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/client/log.py +0 -0
  101. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/client/tile.py +0 -0
  102. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/client/wms.py +0 -0
  103. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/compat/__init__.py +0 -0
  104. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/compat/image.py +0 -0
  105. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config/__init__.py +0 -0
  106. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config/config-schema.json +0 -0
  107. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config/config.py +0 -0
  108. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config/coverage.py +0 -0
  109. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config/defaults.py +0 -0
  110. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config/spec.py +0 -0
  111. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config/validator.py +0 -0
  112. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config_template/__init__.py +0 -0
  113. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config_template/base_config/config.wsgi +0 -0
  114. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config_template/base_config/full_example.yaml +0 -0
  115. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config_template/base_config/full_seed_example.yaml +0 -0
  116. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config_template/base_config/log.ini +0 -0
  117. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config_template/base_config/mapproxy.yaml +0 -0
  118. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/config_template/base_config/seed.yaml +0 -0
  119. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/exception.py +0 -0
  120. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/featureinfo.py +0 -0
  121. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/grid.py +0 -0
  122. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/image/__init__.py +0 -0
  123. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/image/fonts/DejaVuSans.ttf +0 -0
  124. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/image/fonts/DejaVuSansMono.ttf +0 -0
  125. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/image/fonts/LICENSE +0 -0
  126. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/image/fonts/__init__.py +0 -0
  127. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/image/mask.py +0 -0
  128. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/image/merge.py +0 -0
  129. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/image/message.py +0 -0
  130. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/image/opts.py +0 -0
  131. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/image/tile.py +0 -0
  132. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/image/transform.py +0 -0
  133. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/layer.py +0 -0
  134. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/proj.py +0 -0
  135. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/request/__init__.py +0 -0
  136. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/request/arcgis.py +0 -0
  137. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/request/base.py +0 -0
  138. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/request/tile.py +0 -0
  139. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/request/wms/__init__.py +0 -0
  140. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/request/wms/exception.py +0 -0
  141. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/request/wmts.py +0 -0
  142. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/response.py +0 -0
  143. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/__init__.py +0 -0
  144. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/conf/__init__.py +0 -0
  145. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/conf/app.py +0 -0
  146. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/conf/caches.py +0 -0
  147. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/conf/geopackage.py +0 -0
  148. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/conf/layers.py +0 -0
  149. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/conf/seeds.py +0 -0
  150. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/conf/sources.py +0 -0
  151. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/conf/utils.py +0 -0
  152. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/defrag.py +0 -0
  153. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/export.py +0 -0
  154. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/grids.py +0 -0
  155. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/scales.py +0 -0
  156. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/util.py +0 -0
  157. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/script/wms_capabilities.py +0 -0
  158. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/seed/__init__.py +0 -0
  159. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/seed/cachelock.py +0 -0
  160. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/seed/cleanup.py +0 -0
  161. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/seed/config.py +0 -0
  162. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/seed/script.py +0 -0
  163. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/seed/seeder.py +0 -0
  164. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/seed/spec.py +0 -0
  165. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/seed/util.py +0 -0
  166. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/__init__.py +0 -0
  167. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/base.py +0 -0
  168. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/ows.py +0 -0
  169. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/template_helper.py +0 -0
  170. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/demo.html +0 -0
  171. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/openlayers-demo.cfg +0 -0
  172. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/blank.gif +0 -0
  173. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/east-mini.png +0 -0
  174. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/north-mini.png +0 -0
  175. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/south-mini.png +0 -0
  176. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/west-mini.png +0 -0
  177. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/zoom-minus-mini.png +0 -0
  178. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/zoom-plus-mini.png +0 -0
  179. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/img/zoom-world-mini.png +0 -0
  180. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/logo.png +0 -0
  181. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/ol.css +0 -0
  182. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/ol.js +0 -0
  183. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/proj4.min.js +0 -0
  184. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/proj4defs.js +0 -0
  185. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/site.css +0 -0
  186. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/theme/default/framedCloud.css +0 -0
  187. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/theme/default/google.css +0 -0
  188. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/theme/default/ie6-style.css +0 -0
  189. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static/theme/default/style.css +0 -0
  190. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/static.html +0 -0
  191. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/tms_demo.html +0 -0
  192. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/demo/wms_demo.html +0 -0
  193. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/ows_exception.xml +0 -0
  194. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/tms_capabilities.xml +0 -0
  195. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/tms_exception.xml +0 -0
  196. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/tms_root_resource.xml +0 -0
  197. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/tms_tilemap_capabilities.xml +0 -0
  198. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/wms100capabilities.xml +0 -0
  199. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/wms100exception.xml +0 -0
  200. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/wms110capabilities.xml +0 -0
  201. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/wms110exception.xml +0 -0
  202. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/wms111capabilities.xml +0 -0
  203. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/wms111exception.xml +0 -0
  204. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/wms130capabilities.xml +0 -0
  205. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/wms130exception.xml +0 -0
  206. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/wmts100capabilities.xml +0 -0
  207. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/templates/wmts100exception.xml +0 -0
  208. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/tile.py +0 -0
  209. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/service/wms.py +0 -0
  210. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/source/__init__.py +0 -0
  211. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/source/arcgis.py +0 -0
  212. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/source/error.py +0 -0
  213. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/source/mapnik.py +0 -0
  214. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/source/tile.py +0 -0
  215. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/source/wms.py +0 -0
  216. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/srs.py +0 -0
  217. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/template.py +0 -0
  218. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/__init__.py +0 -0
  219. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/conftest.py +0 -0
  220. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/helper.py +0 -0
  221. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/http.py +0 -0
  222. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/image.py +0 -0
  223. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/mocker.py +0 -0
  224. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/common.xsd +0 -0
  225. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_bul.xsd +0 -0
  226. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_cze.xsd +0 -0
  227. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dan.xsd +0 -0
  228. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dut.xsd +0 -0
  229. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_eng.xsd +0 -0
  230. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_est.xsd +0 -0
  231. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fin.xsd +0 -0
  232. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fre.xsd +0 -0
  233. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ger.xsd +0 -0
  234. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gle.xsd +0 -0
  235. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gre.xsd +0 -0
  236. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_hun.xsd +0 -0
  237. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ita.xsd +0 -0
  238. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lav.xsd +0 -0
  239. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lit.xsd +0 -0
  240. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_mlt.xsd +0 -0
  241. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_pol.xsd +0 -0
  242. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_por.xsd +0 -0
  243. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_rum.xsd +0 -0
  244. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slo.xsd +0 -0
  245. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slv.xsd +0 -0
  246. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_spa.xsd +0 -0
  247. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_swe.xsd +0 -0
  248. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/common/1.0/network.xsd +0 -0
  249. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/inspire/inspire_vs/1.0/inspire_vs.xsd +0 -0
  250. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/kml/2.2.0/ReadMe.txt +0 -0
  251. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/kml/2.2.0/atom-author-link.xsd +0 -0
  252. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/kml/2.2.0/ogckml22.xsd +0 -0
  253. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/kml/2.2.0/xAL.xsd +0 -0
  254. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/ReadMe.txt +0 -0
  255. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/ows19115subset.xsd +0 -0
  256. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsAll.xsd +0 -0
  257. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsCommon.xsd +0 -0
  258. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsContents.xsd +0 -0
  259. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsDataIdentification.xsd +0 -0
  260. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsDomainType.xsd +0 -0
  261. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsExceptionReport.xsd +0 -0
  262. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsGetCapabilities.xsd +0 -0
  263. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsGetResourceByID.xsd +0 -0
  264. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsInputOutputData.xsd +0 -0
  265. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsManifest.xsd +0 -0
  266. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsOperationsMetadata.xsd +0 -0
  267. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsServiceIdentification.xsd +0 -0
  268. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/ows/1.1.0/owsServiceProvider.xsd +0 -0
  269. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/sld/1.1.0/sld_capabilities.xsd +0 -0
  270. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.dtd +0 -0
  271. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.xml +0 -0
  272. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.dtd +0 -0
  273. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.xml +0 -0
  274. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.dtd +0 -0
  275. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.xml +0 -0
  276. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.dtd +0 -0
  277. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.xml +0 -0
  278. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/OGC-exception.xsd +0 -0
  279. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
  280. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd +0 -0
  281. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd +0 -0
  282. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.dtd +0 -0
  283. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.xml +0 -0
  284. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.dtd +0 -0
  285. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.xml +0 -0
  286. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.3.0/ReadMe.txt +0 -0
  287. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xml +0 -0
  288. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xsd +0 -0
  289. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xml +0 -0
  290. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xsd +0 -0
  291. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/OGC-exception.xsd +0 -0
  292. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
  293. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/WMS_MS_Capabilities.dtd +0 -0
  294. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/WMS_exception_1_1_1.dtd +0 -0
  295. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.dtd +0 -0
  296. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.xml +0 -0
  297. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.dtd +0 -0
  298. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.xml +0 -0
  299. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/ReadMe.txt +0 -0
  300. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmts.xsd +0 -0
  301. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsAbstract.wsdl +0 -0
  302. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_request.xsd +0 -0
  303. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_response.xsd +0 -0
  304. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_request.xsd +0 -0
  305. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_response.xsd +0 -0
  306. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsGetTile_request.xsd +0 -0
  307. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsKVP.xsd +0 -0
  308. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/wmts/1.0/wmtsPayload_response.xsd +0 -0
  309. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/xlink/1.0.0/ReadMe.txt +0 -0
  310. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/xlink/1.0.0/xlinks.xsd +0 -0
  311. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/schemas/xml.xsd +0 -0
  312. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/__init__.py +0 -0
  313. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/arcgis.yaml +0 -0
  314. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/auth.yaml +0 -0
  315. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache.mbtiles +0 -0
  316. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_azureblob.yaml +0 -0
  317. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_band_merge.yaml +0 -0
  318. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_bulk_meta_tiles.yaml +0 -0
  319. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_coverage.yaml +0 -0
  320. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png +0 -0
  321. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_data/wms_cache_EPSG900913/01/000/000/000/000/000/001.jpeg +0 -0
  322. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_data/wms_cache_transparent_EPSG900913/01/000/000/000/000/000/001.png +0 -0
  323. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_geopackage.yaml +0 -0
  324. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_grid_names.yaml +0 -0
  325. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_mbtiles.yaml +0 -0
  326. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_s3.yaml +0 -0
  327. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/cache_source.yaml +0 -0
  328. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/combined_sources.yaml +0 -0
  329. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/coverage.yaml +0 -0
  330. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/demo.yaml +0 -0
  331. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/dimension.yaml +0 -0
  332. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/disable_storage.yaml +0 -0
  333. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/empty_ogrdata.geojson +0 -0
  334. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/formats.yaml +0 -0
  335. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/inspire.yaml +0 -0
  336. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/inspire_full.yaml +0 -0
  337. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/kml_layer.yaml +0 -0
  338. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/layer.yaml +0 -0
  339. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/layergroups.yaml +0 -0
  340. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/layergroups_root.yaml +0 -0
  341. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/legendgraphic.yaml +0 -0
  342. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/mapnik_source.yaml +0 -0
  343. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/mapproxy_export.yaml +0 -0
  344. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/mapserver.yaml +0 -0
  345. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/minimal_cgi.py +0 -0
  346. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/mixed_mode.yaml +0 -0
  347. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/multi_cache_layers.yaml +0 -0
  348. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/multiapp1.yaml +0 -0
  349. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/multiapp2.yaml +0 -0
  350. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/renderd_client.yaml +0 -0
  351. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/scalehints.yaml +0 -0
  352. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/seed.yaml +0 -0
  353. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/seed_mapproxy.yaml +0 -0
  354. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/seed_timeouts.yaml +0 -0
  355. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/seed_timeouts_mapproxy.yaml +0 -0
  356. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/seedonly.yaml +0 -0
  357. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/sld.yaml +0 -0
  358. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/source_errors.yaml +0 -0
  359. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/source_errors_raise.yaml +0 -0
  360. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/tileservice_origin.yaml +0 -0
  361. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/tileservice_refresh.yaml +0 -0
  362. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/tilesource_minmax_res.yaml +0 -0
  363. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util-conf-base-grids.yaml +0 -0
  364. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util-conf-overwrite.yaml +0 -0
  365. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util-conf-wms-111-cap.xml +0 -0
  366. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util_wms_capabilities111.xml +0 -0
  367. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util_wms_capabilities130.xml +0 -0
  368. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/util_wms_capabilities_service_exception.xml +0 -0
  369. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/watermark.yaml +0 -0
  370. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/wms_srs_extent.yaml +0 -0
  371. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/wms_versions.yaml +0 -0
  372. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/wmts.yaml +0 -0
  373. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/wmts_dimensions.yaml +0 -0
  374. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/xslt_featureinfo.yaml +0 -0
  375. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/fixture/xslt_featureinfo_input.yaml +0 -0
  376. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_arcgis.py +0 -0
  377. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_auth.py +0 -0
  378. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_behind_proxy.py +0 -0
  379. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_bulk_meta_tiles.py +0 -0
  380. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_azureblob.py +0 -0
  381. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_band_merge.py +0 -0
  382. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_coverage.py +0 -0
  383. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_geopackage.py +0 -0
  384. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_grid_names.py +0 -0
  385. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_mbtiles.py +0 -0
  386. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_s3.py +0 -0
  387. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_cache_source.py +0 -0
  388. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_combined_sources.py +0 -0
  389. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_coverage.py +0 -0
  390. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_decorate_img.py +0 -0
  391. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_demo_with_extra_service.py +0 -0
  392. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_dimensions.py +0 -0
  393. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_disable_storage.py +0 -0
  394. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_formats.py +0 -0
  395. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_inspire_vs.py +0 -0
  396. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_kml.py +0 -0
  397. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_layergroups.py +0 -0
  398. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_legendgraphic.py +0 -0
  399. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_mapnik.py +0 -0
  400. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_mapserver.py +0 -0
  401. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_mixed_mode_format.py +0 -0
  402. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_multi_cache_layers.py +0 -0
  403. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_multiapp.py +0 -0
  404. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_refresh.py +0 -0
  405. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_renderd_client.py +0 -0
  406. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_response_headers.py +0 -0
  407. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_scalehints.py +0 -0
  408. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_seed.py +0 -0
  409. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_seed_only.py +0 -0
  410. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_sld.py +0 -0
  411. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_source_errors.py +0 -0
  412. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_tilesource_minmax_res.py +0 -0
  413. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_tms.py +0 -0
  414. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_tms_origin.py +0 -0
  415. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_util_conf.py +0 -0
  416. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_util_export.py +0 -0
  417. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_util_grids.py +0 -0
  418. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_util_wms_capabilities.py +0 -0
  419. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_watermark.py +0 -0
  420. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_wms.py +0 -0
  421. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_wms_srs_extent.py +0 -0
  422. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_wms_version.py +0 -0
  423. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_wmsc.py +0 -0
  424. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_wmts.py +0 -0
  425. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_wmts_dimensions.py +0 -0
  426. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_wmts_restful.py +0 -0
  427. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/system/test_xslt_featureinfo.py +0 -0
  428. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/test_http_helper.py +0 -0
  429. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/__init__.py +0 -0
  430. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/epsg +0 -0
  431. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/polygons/polygons.dbf +0 -0
  432. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/polygons/polygons.shp +0 -0
  433. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/polygons/polygons.shx +0 -0
  434. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_async.py +0 -0
  435. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_auth.py +0 -0
  436. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache.py +0 -0
  437. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_azureblob.py +0 -0
  438. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_compact.py +0 -0
  439. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_couchdb.py +0 -0
  440. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_geopackage.py +0 -0
  441. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_mbtile.py +0 -0
  442. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_redis.py +0 -0
  443. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_s3.py +0 -0
  444. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_cache_tile.py +0 -0
  445. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_client.py +0 -0
  446. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_client_arcgis.py +0 -0
  447. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_client_cgi.py +0 -0
  448. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_collections.py +0 -0
  449. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_concat_legends.py +0 -0
  450. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_conf_loader.py +0 -0
  451. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_conf_validator.py +0 -0
  452. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_config.py +0 -0
  453. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_decorate_img.py +0 -0
  454. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_exceptions.py +0 -0
  455. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_featureinfo.py +0 -0
  456. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_file_lock_load.py +0 -0
  457. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_fs.py +0 -0
  458. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_geom.py +0 -0
  459. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_grid.py +0 -0
  460. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_image.py +0 -0
  461. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_image_mask.py +0 -0
  462. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_image_messages.py +0 -0
  463. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_image_options.py +0 -0
  464. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_isodate.py +0 -0
  465. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_multiapp.py +0 -0
  466. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_ogr_reader.py +0 -0
  467. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_request.py +0 -0
  468. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_request_wmts.py +0 -0
  469. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_response.py +0 -0
  470. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_seed.py +0 -0
  471. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_seed_cachelock.py +0 -0
  472. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_srs.py +0 -0
  473. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_tiled_source.py +0 -0
  474. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_tilefilter.py +0 -0
  475. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_times.py +0 -0
  476. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_timeutils.py +0 -0
  477. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_util_conf_utils.py +0 -0
  478. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_utils.py +0 -0
  479. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_wms_capabilities.py +0 -0
  480. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_wms_layer.py +0 -0
  481. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/test/unit/test_yaml.py +0 -0
  482. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/tilefilter.py +0 -0
  483. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/__init__.py +0 -0
  484. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/async_.py +0 -0
  485. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/collections.py +0 -0
  486. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/coverage.py +0 -0
  487. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/__init__.py +0 -0
  488. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/dictspec/__init__.py +0 -0
  489. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/dictspec/spec.py +0 -0
  490. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/dictspec/test/__init__.py +0 -0
  491. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/dictspec/test/test_validator.py +0 -0
  492. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/dictspec/validator.py +0 -0
  493. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/local.py +0 -0
  494. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/lockfile.py +0 -0
  495. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/odict.py +0 -0
  496. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/serving.py +0 -0
  497. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/tempita/__init__.py +0 -0
  498. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/tempita/_looper.py +0 -0
  499. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/tempita/string_utils.py +0 -0
  500. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/__init__.py +0 -0
  501. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/duration.py +0 -0
  502. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/parse.py +0 -0
  503. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/__init__.py +0 -0
  504. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/test_parse.py +0 -0
  505. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/test_util.py +0 -0
  506. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/wms-example-111.xml +0 -0
  507. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/wms-example-130.xml +0 -0
  508. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/wms-large-111.xml +0 -0
  509. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml +0 -0
  510. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ext/wmsparse/util.py +0 -0
  511. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/fs.py +0 -0
  512. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/geom.py +0 -0
  513. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/lib.py +0 -0
  514. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/lock.py +0 -0
  515. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/ogr.py +0 -0
  516. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/py.py +0 -0
  517. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/times.py +0 -0
  518. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/util/yaml.py +0 -0
  519. {mapproxy-4.0.0 → mapproxy-4.0.2}/mapproxy/version.py +0 -0
  520. {mapproxy-4.0.0 → mapproxy-4.0.2}/pyproject.toml +0 -0
  521. {mapproxy-4.0.0 → mapproxy-4.0.2}/requirements-tests.txt +0 -0
  522. {mapproxy-4.0.0 → mapproxy-4.0.2}/setup.cfg +0 -0
@@ -1,3 +1,24 @@
1
+ 4.0.2 2025-04-10
2
+ ~~~~~~~~~~~~~~~~
3
+
4
+ Fixes:
5
+
6
+ - Security fix to prevent XSS injections in demo pages
7
+ - Security fix to prevent reading file urls
8
+
9
+
10
+ 4.0.1 2025-03-25
11
+ ~~~~~~~~~~~~~~~~
12
+
13
+ Improvements:
14
+
15
+ - Added docs regarding OGC API support
16
+
17
+ Fixes:
18
+
19
+ - WMTS Demo now works if kvp is disabled
20
+
21
+
1
22
  4.0.0 2025-03-21
2
23
  ~~~~~~~~~~~~~~~~
3
24
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MapProxy
3
- Version: 4.0.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,27 @@ 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
+
65
+ 4.0.1 2025-03-25
66
+ ~~~~~~~~~~~~~~~~
67
+
68
+ Improvements:
69
+
70
+ - Added docs regarding OGC API support
71
+
72
+ Fixes:
73
+
74
+ - WMTS Demo now works if kvp is disabled
75
+
76
+
56
77
  4.0.0 2025-03-21
57
78
  ~~~~~~~~~~~~~~~~
58
79
 
@@ -143,38 +164,6 @@ Fixes:
143
164
  - Fix transparency in TMS demo page.
144
165
 
145
166
 
146
- 3.0.1 2024-08-27
147
- ~~~~~~~~~~~~~~~~
148
-
149
- Fixes:
150
-
151
- - Fix capabilities links in demo page and config template
152
- - Trivy report format
153
-
154
-
155
- 3.0.0 2024-08-27
156
- ~~~~~~~~~~~~~~~~
157
-
158
- Breaking:
159
-
160
- - Add proper XML Exception when service parameter disabled / invalid or missing
161
- In the past MapProxy returned WMS Capabilities when no explicit service parameter was given in
162
- GetCapabilities requests. With this change, an OGC exception will be returned instead.
163
- Invalid service types now also return a proper exception instead of an `internal error`.
164
- Besides, the status code of exception responses now have a 400 or 500 code instead of 200
165
- for better conformity.
166
-
167
- Maintenance:
168
-
169
- - Add test for seeding sqlite cache
170
- - Documentation updates and clarifications
171
- - Dependency updates
172
-
173
- Fixes:
174
-
175
- - Fix gh-pages workflow
176
-
177
-
178
167
 
179
168
  Older changes
180
169
  -------------
@@ -34,6 +34,7 @@ doc/install_windows.rst
34
34
  doc/labeling.rst
35
35
  doc/mapproxy_util.rst
36
36
  doc/mapproxy_util_autoconfig.rst
37
+ doc/ogc_api.rst
37
38
  doc/plugins.rst
38
39
  doc/seed.rst
39
40
  doc/services.rst
@@ -483,6 +484,7 @@ mapproxy/util/__init__.py
483
484
  mapproxy/util/async_.py
484
485
  mapproxy/util/collections.py
485
486
  mapproxy/util/coverage.py
487
+ mapproxy/util/escape.py
486
488
  mapproxy/util/fs.py
487
489
  mapproxy/util/geom.py
488
490
  mapproxy/util/lib.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MapProxy
3
- Version: 4.0.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,27 @@ 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
+
65
+ 4.0.1 2025-03-25
66
+ ~~~~~~~~~~~~~~~~
67
+
68
+ Improvements:
69
+
70
+ - Added docs regarding OGC API support
71
+
72
+ Fixes:
73
+
74
+ - WMTS Demo now works if kvp is disabled
75
+
76
+
56
77
  4.0.0 2025-03-21
57
78
  ~~~~~~~~~~~~~~~~
58
79
 
@@ -143,38 +164,6 @@ Fixes:
143
164
  - Fix transparency in TMS demo page.
144
165
 
145
166
 
146
- 3.0.1 2024-08-27
147
- ~~~~~~~~~~~~~~~~
148
-
149
- Fixes:
150
-
151
- - Fix capabilities links in demo page and config template
152
- - Trivy report format
153
-
154
-
155
- 3.0.0 2024-08-27
156
- ~~~~~~~~~~~~~~~~
157
-
158
- Breaking:
159
-
160
- - Add proper XML Exception when service parameter disabled / invalid or missing
161
- In the past MapProxy returned WMS Capabilities when no explicit service parameter was given in
162
- GetCapabilities requests. With this change, an OGC exception will be returned instead.
163
- Invalid service types now also return a proper exception instead of an `internal error`.
164
- Besides, the status code of exception responses now have a 400 or 500 code instead of 200
165
- for better conformity.
166
-
167
- Maintenance:
168
-
169
- - Add test for seeding sqlite cache
170
- - Documentation updates and clarifications
171
- - Dependency updates
172
-
173
- Fixes:
174
-
175
- - Fix gh-pages workflow
176
-
177
-
178
167
 
179
168
  Older changes
180
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
@@ -27,6 +27,7 @@ MapProxy Documentation
27
27
  mapproxy_util_autoconfig
28
28
  deployment
29
29
  configuration_examples
30
+ ogc_api
30
31
  inspire
31
32
  labeling
32
33
  auth
@@ -25,15 +25,13 @@ base images for implementing custom setups. As they have no WebServer running th
25
25
  The images ending with ``-dev``, start the integrated webserver mapproxy provides through
26
26
  ``mapproxy-util serve-develop``. These should not be used in a production environment!
27
27
 
28
- The images ending with ``-nginx``, come bundled with a preconfigured `nginx`_ HTTP Server, that lets you use MapProxy
29
- instantly in a production environment.
28
+ The images ending with ``-nginx``, come bundled with a preconfigured `nginx <https://nginx.org/>`_ HTTP Server, that
29
+ lets you use MapProxy instantly in a production environment.
30
30
 
31
31
  See the quickstart section below for a configuration / example on how to use those images.
32
32
 
33
- There are also several unofficial Docker images available on `Docker Hub`_ that provide ready-to-use containers for
34
- MapProxy.
35
-
36
- .. _`Docker Hub`: https://hub.docker.com/search?q=mapproxy
33
+ There are also several unofficial Docker images available on `Docker Hub <https://hub.docker.com/search?q=mapproxy>`_
34
+ that provide ready-to-use containers forMapProxy.
37
35
 
38
36
  The community has very good experiences with the following ones:
39
37
 
@@ -50,7 +48,7 @@ Quickstart
50
48
  ----------
51
49
 
52
50
  The mapproxy repository includes an `example docker compose file <https://github.com/mapproxy/mapproxy/blob/master/docker-compose.yaml>`_
53
- that you can use to run one of the images or as a reference for the most commonly used options.
51
+ that you can use to run one of the images or as a reference for the most commonly used options.
54
52
 
55
53
  Create a directory (e.g. `mapproxyconfig`) for your configuration files. Put your configs into that folder.
56
54
  If you do not supply a mapproxy config file the image will create a default seed.yaml and mapproxy.yaml for you.
@@ -80,17 +78,16 @@ Volume-Mounts
80
78
  - ``/mapproxy/config/mapproxy.yaml``: MapProxy Config
81
79
  - ``/mapproxy/config/logging.ini``: Logging-Configuration
82
80
  - ``/mapproxy/config/cache_data``: Cache Data dir. Make sure that this directory is writable for the mapproxy image.
83
- This can be achieved with `chmod -R a+r cache_data`
81
+ This can be achieved with `chmod -R a+r cache_data`
84
82
 
85
83
 
86
84
  Environment Variables
87
85
  ~~~~~~~~~~~~~~~~~~~~~
88
86
 
89
87
  - ``MULTIAPP_MAPPROXY``: **This can only be used in nginx images.** If set to ``true``, MapProxy will start in multi app
90
- mode and will run all configurations in the ``/mapproxy/config/apps`` directory as different apps. Default
91
- is ``false``.
88
+ mode and will run all configurations in the ``/mapproxy/config/apps`` directory as different apps. Default is ``false``.
92
89
  - ``MULTIAPP_ALLOW_LISTINGS``: In multi app mode if set to ``true``, MapProxy lists all available apps on the root page.
93
- Default is ``false``.
90
+ Default is ``false``.
94
91
 
95
92
 
96
93
  Build your own image
@@ -0,0 +1,12 @@
1
+ OGC API Support
2
+ ===============
3
+
4
+ MapProxy does not support the OGC APIs natively. There are ways to combine MapProxy with pygeoapi via docker to be able
5
+ to use MapProxy through the OGC API of pygeoapi. An example project exists here:
6
+ https://github.com/mapproxy/mapproxy-pygeoapi-example.
7
+
8
+ Call for sponsors
9
+ -----------------
10
+
11
+ This feature is important to make MapProxy future-proof and it is desirable to integrate OGC APIs directly into
12
+ MapProxy. If you are interested in sponsoring this feature please contact sales@terrestris.de.
@@ -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)
@@ -2349,12 +2348,9 @@ class ServiceConfiguration(ConfigurationBase):
2349
2348
  kvp = wmts_conf.get('kvp')
2350
2349
  restful = wmts_conf.get('restful')
2351
2350
 
2352
- if kvp is None and restful is None:
2353
- kvp = restful = True
2354
-
2355
- if kvp:
2351
+ if kvp or kvp is None:
2356
2352
  services.append('wmts_kvp')
2357
- if restful:
2353
+ if restful or restful is None:
2358
2354
  services.append('wmts_restful')
2359
2355
 
2360
2356
  if 'wms' in self.context.services.conf:
@@ -2412,6 +2408,10 @@ def load_configuration(mapproxy_conf, seed=False, ignore_warnings=True, renderd=
2412
2408
  for error in errors:
2413
2409
  log.warning(error)
2414
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
+
2415
2415
  return ProxyConfiguration(conf_dict, conf_base_dir=conf_base_dir, seed=seed,
2416
2416
  renderd=renderd)
2417
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
- def handle(self, req):
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
- internal_url = '%s/service?REQUEST=GetCapabilities&SERVICE=WMS' % (req.server_script_url)
142
- if 'type' in req.args and req.args['type'] == 'external':
143
- url = internal_url.replace(req.server_script_url, req.script_url)
144
- else:
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
- internal_url = '%s/service?REQUEST=GetCapabilities&SERVICE=WMS&tiled=true' % (req.server_script_url)
150
- if 'type' in req.args and req.args['type'] == 'external':
151
- url = internal_url.replace(req.server_script_url, req.script_url)
152
- else:
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
- internal_url = '%s/service?REQUEST=GetCapabilities&SERVICE=WMTS' % (req.server_script_url)
158
- if 'type' in req.args and req.args['type'] == 'external':
159
- url = internal_url.replace(req.server_script_url, req.script_url)
160
- else:
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
- internal_url = '%s/wmts/1.0.0/WMTSCapabilities.xml' % (req.server_script_url)
166
- if 'type' in req.args and req.args['type'] == 'external':
167
- url = internal_url.replace(req.server_script_url, req.script_url)
168
- else:
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 then sorry)
175
- layer = req.args['layer'].replace('..', '')
176
- srs = req.args['srs'].replace('..', '')
177
- internal_url = '%s/tms/1.0.0/%s/%s' % (req.server_script_url, layer, srs)
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}'
178
199
  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)
182
- else:
183
- url = internal_url
184
- capabilities = urllib2.urlopen(url)
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 = escape(req.args['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=escape(req.args['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=escape(req.args['srs']),
305
- format=escape(req.args['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,
@@ -317,6 +337,8 @@ class DemoServer(Server):
317
337
  wmts_layer = layer
318
338
  break
319
339
 
340
+ rest_enabled = 'wmts_restful' in self.services
341
+
320
342
  restful_url = self.restful_template.replace('{Layer}', wmts_layer.name, 1)
321
343
  if '{Format}' in restful_url:
322
344
  restful_url = restful_url.replace('{Format}', wmts_layer.format)
@@ -330,11 +352,12 @@ class DemoServer(Server):
330
352
  background_url = self.background["url"]
331
353
  return template.substitute(layer=wmts_layer,
332
354
  matrix_set=wmts_layer.grid.name,
333
- format=escape(req.args['format']),
334
- srs=escape(req.args['srs']),
355
+ format=escape_html(req.args['format']),
356
+ srs=escape_html(req.args['srs']),
335
357
  resolutions=wmts_layer.grid.resolutions,
336
358
  units=units,
337
359
  all_tile_layers=self.tile_layers,
360
+ rest_enabled=rest_enabled,
338
361
  restful_url=restful_url,
339
362
  background_url=background_url)
340
363
 
@@ -353,15 +376,3 @@ class DemoServer(Server):
353
376
  return True
354
377
  return False
355
378
  return True
356
-
357
-
358
- def escape(data):
359
- """
360
- Escape user-provided input data for safe inclusion in HTML _and_ JS to prevent XSS.
361
- """
362
- data = data.replace('&', '&amp;')
363
- data = data.replace('>', '&gt;')
364
- data = data.replace('<', '&lt;')
365
- data = data.replace("'", '')
366
- data = data.replace('"', '')
367
- 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)
@@ -11,8 +11,6 @@ jscript_functions = None
11
11
  <h2>{{service}} GetCapabilities</h2>
12
12
  <a href="{{url}}">{{url}}</a>
13
13
  <pre>
14
- {{for line in capabilities}}
15
- {{escape(wrapper.fill(line.decode('utf8')))}}
16
- {{endfor}}
14
+ {{capabilities}}
17
15
  </pre>
18
16
 
@@ -46,13 +46,14 @@ jscript_functions=None
46
46
  const projection = ol.proj.get(srs);
47
47
 
48
48
  const source = new ol.source.WMTS({
49
- url: '../service?',
49
+ url: {{if rest_enabled}}'../wmts{{restful_url}}'{{else}}'../service?'{{endif}},
50
50
  layer: "{{layer.name}}",
51
51
  matrixSet: '{{matrix_set}}',
52
52
  format: "{{format}}",
53
53
  projection: "{{srs}}",
54
54
  transparent: transparent,
55
55
  style: '',
56
+ {{if rest_enabled}}requestEncoding: 'REST',{{endif}}
56
57
  tileGrid: new ol.tilegrid.WMTS({
57
58
  origin: ol.extent.getTopLeft(grid_extent),
58
59
  resolutions: resolutions,
@@ -184,7 +184,7 @@ class WMTSServer(Server):
184
184
  if result['authorized'] == 'unauthenticated':
185
185
  raise RequestError('unauthorized', status=401)
186
186
  if result['authorized'] == 'full':
187
- return self.layers.values()
187
+ return list(self.layers.values())
188
188
  if result['authorized'] == 'none':
189
189
  raise RequestError('forbidden', status=403)
190
190
  allowed_layers = []
@@ -193,7 +193,7 @@ class WMTSServer(Server):
193
193
  allowed_layers.append(layer)
194
194
  return allowed_layers
195
195
  else:
196
- return self.layers.values()
196
+ return list(self.layers.values())
197
197
 
198
198
  def check_request(self, request, info_formats=None):
199
199
  request.make_request()
@@ -1,5 +1,6 @@
1
1
  services:
2
- demo:
2
+ wms:
3
+
3
4
  layers:
4
5
  - name: grid_layer
5
6
  title: Grid Layer