MapProxy 2.1.1__tar.gz → 2.2.1__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 (520) hide show
  1. {MapProxy-2.1.1 → mapproxy-2.2.1}/CHANGES.txt +31 -0
  2. {MapProxy-2.1.1 → mapproxy-2.2.1}/MapProxy.egg-info/PKG-INFO +49 -37
  3. {MapProxy-2.1.1 → mapproxy-2.2.1}/MapProxy.egg-info/SOURCES.txt +1 -0
  4. {MapProxy-2.1.1 → mapproxy-2.2.1}/MapProxy.egg-info/entry_points.txt +0 -1
  5. {MapProxy-2.1.1 → mapproxy-2.2.1}/MapProxy.egg-info/requires.txt +5 -3
  6. {MapProxy-2.1.1 → mapproxy-2.2.1}/PKG-INFO +49 -37
  7. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/configuration.rst +24 -9
  8. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/deployment.rst +2 -0
  9. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/development.rst +1 -1
  10. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/install.rst +2 -2
  11. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/install_windows.rst +4 -6
  12. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/plugins.rst +27 -3
  13. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/services.rst +1 -1
  14. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/sources.rst +1 -1
  15. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/geopackage.py +4 -4
  16. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config/config-schema.json +8 -0
  17. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config/loader.py +18 -1
  18. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config/spec.py +2 -0
  19. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/image/message.py +4 -1
  20. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/multiapp.py +2 -1
  21. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/demo.py +66 -55
  22. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/kml.py +2 -1
  23. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/capabilities_demo.html +1 -3
  24. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/wmts100capabilities.xml +7 -1
  25. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/tile.py +2 -1
  26. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/wmts.py +32 -3
  27. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/source/mapnik.py +4 -9
  28. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/template.py +4 -1
  29. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/legendgraphic.yaml +16 -0
  30. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util_grids.yaml +2 -1
  31. mapproxy-2.2.1/mapproxy/test/system/test_demo.py +123 -0
  32. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_legendgraphic.py +38 -2
  33. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_mapserver.py +0 -1
  34. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_client.py +0 -2
  35. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_client_cgi.py +0 -2
  36. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_featureinfo.py +0 -3
  37. mapproxy-2.2.1/mapproxy/util/escape.py +10 -0
  38. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/odict.py +2 -2
  39. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/wsgiapp.py +12 -1
  40. {MapProxy-2.1.1 → mapproxy-2.2.1}/setup.py +2 -2
  41. MapProxy-2.1.1/mapproxy/test/system/test_demo.py +0 -56
  42. {MapProxy-2.1.1 → mapproxy-2.2.1}/AUTHORS.txt +0 -0
  43. {MapProxy-2.1.1 → mapproxy-2.2.1}/COPYING.txt +0 -0
  44. {MapProxy-2.1.1 → mapproxy-2.2.1}/LICENSE.txt +0 -0
  45. {MapProxy-2.1.1 → mapproxy-2.2.1}/MANIFEST.in +0 -0
  46. {MapProxy-2.1.1 → mapproxy-2.2.1}/MapProxy.egg-info/dependency_links.txt +0 -0
  47. {MapProxy-2.1.1 → mapproxy-2.2.1}/MapProxy.egg-info/not-zip-safe +0 -0
  48. {MapProxy-2.1.1 → mapproxy-2.2.1}/MapProxy.egg-info/top_level.txt +0 -0
  49. {MapProxy-2.1.1 → mapproxy-2.2.1}/README.md +0 -0
  50. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/GM.txt +0 -0
  51. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/_static/logo.png +0 -0
  52. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/_static/logo_title.png +0 -0
  53. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/_static/mapproxy.css +0 -0
  54. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/_templates/versions.html +0 -0
  55. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/auth.rst +0 -0
  56. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/caches.rst +0 -0
  57. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/caching_layer_dimensions.rst +0 -0
  58. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/conf.py +0 -0
  59. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/configuration_examples.rst +0 -0
  60. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/coverages.rst +0 -0
  61. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/decorate_img.rst +0 -0
  62. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/bicubic.png +0 -0
  63. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/bilinear.png +0 -0
  64. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/labeling-dynamic.png +0 -0
  65. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/labeling-meta-buffer.png +0 -0
  66. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/labeling-metatiling-buffer.png +0 -0
  67. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/labeling-metatiling.png +0 -0
  68. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/labeling-no-clip.png +0 -0
  69. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/labeling-no-placement.png +0 -0
  70. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/labeling-partial-false.png +0 -0
  71. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/labeling-repeated.png +0 -0
  72. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/mapnik-webmerc-hq.png +0 -0
  73. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/mapnik-webmerc.png +0 -0
  74. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/mapproxy-demo.png +0 -0
  75. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/imgs/nearest.png +0 -0
  76. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/index.rst +0 -0
  77. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/inspire.rst +0 -0
  78. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/install_docker.rst +0 -0
  79. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/install_osgeo4w.rst +0 -0
  80. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/labeling.rst +0 -0
  81. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/mapproxy_util.rst +0 -0
  82. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/mapproxy_util_autoconfig.rst +0 -0
  83. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/seed.rst +0 -0
  84. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/tutorial.rst +0 -0
  85. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/tutorial.yaml +0 -0
  86. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/yaml/cache_conf.yaml +0 -0
  87. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/yaml/grid_conf.yaml +0 -0
  88. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/yaml/merged_conf.yaml +0 -0
  89. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/yaml/meta_conf.yaml +0 -0
  90. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/yaml/seed.yaml +0 -0
  91. {MapProxy-2.1.1 → mapproxy-2.2.1}/doc/yaml/simple_conf.yaml +0 -0
  92. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/__init__.py +0 -0
  93. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/__init__.py +0 -0
  94. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/azureblob.py +0 -0
  95. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/base.py +0 -0
  96. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/compact.py +0 -0
  97. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/couchdb.py +0 -0
  98. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/dummy.py +0 -0
  99. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/file.py +0 -0
  100. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/legend.py +0 -0
  101. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/mbtiles.py +0 -0
  102. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/meta.py +0 -0
  103. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/path.py +0 -0
  104. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/redis.py +0 -0
  105. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/renderd.py +0 -0
  106. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/riak.py +0 -0
  107. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/s3.py +0 -0
  108. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/cache/tile.py +0 -0
  109. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/client/__init__.py +0 -0
  110. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/client/arcgis.py +0 -0
  111. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/client/cgi.py +0 -0
  112. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/client/http.py +0 -0
  113. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/client/log.py +0 -0
  114. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/client/tile.py +0 -0
  115. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/client/wms.py +0 -0
  116. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/compat/__init__.py +0 -0
  117. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/compat/image.py +0 -0
  118. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config/__init__.py +0 -0
  119. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config/config.py +0 -0
  120. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config/coverage.py +0 -0
  121. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config/defaults.py +0 -0
  122. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config/validator.py +0 -0
  123. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config_template/__init__.py +0 -0
  124. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config_template/base_config/config.wsgi +0 -0
  125. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config_template/base_config/full_example.yaml +0 -0
  126. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config_template/base_config/full_seed_example.yaml +0 -0
  127. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config_template/base_config/log.ini +0 -0
  128. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config_template/base_config/mapproxy.yaml +0 -0
  129. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/config_template/base_config/seed.yaml +0 -0
  130. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/exception.py +0 -0
  131. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/featureinfo.py +0 -0
  132. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/grid.py +0 -0
  133. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/image/__init__.py +0 -0
  134. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/image/fonts/DejaVuSans.ttf +0 -0
  135. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/image/fonts/DejaVuSansMono.ttf +0 -0
  136. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/image/fonts/LICENSE +0 -0
  137. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/image/fonts/__init__.py +0 -0
  138. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/image/mask.py +0 -0
  139. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/image/merge.py +0 -0
  140. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/image/opts.py +0 -0
  141. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/image/tile.py +0 -0
  142. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/image/transform.py +0 -0
  143. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/layer.py +0 -0
  144. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/proj.py +0 -0
  145. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/request/__init__.py +0 -0
  146. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/request/arcgis.py +0 -0
  147. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/request/base.py +0 -0
  148. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/request/tile.py +0 -0
  149. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/request/wms/__init__.py +0 -0
  150. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/request/wms/exception.py +0 -0
  151. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/request/wmts.py +0 -0
  152. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/response.py +0 -0
  153. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/__init__.py +0 -0
  154. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/conf/__init__.py +0 -0
  155. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/conf/app.py +0 -0
  156. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/conf/caches.py +0 -0
  157. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/conf/geopackage.py +0 -0
  158. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/conf/layers.py +0 -0
  159. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/conf/seeds.py +0 -0
  160. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/conf/sources.py +0 -0
  161. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/conf/utils.py +0 -0
  162. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/defrag.py +0 -0
  163. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/export.py +0 -0
  164. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/grids.py +0 -0
  165. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/scales.py +0 -0
  166. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/util.py +0 -0
  167. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/script/wms_capabilities.py +0 -0
  168. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/seed/__init__.py +0 -0
  169. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/seed/cachelock.py +0 -0
  170. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/seed/cleanup.py +0 -0
  171. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/seed/config.py +0 -0
  172. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/seed/script.py +0 -0
  173. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/seed/seeder.py +0 -0
  174. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/seed/spec.py +0 -0
  175. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/seed/util.py +0 -0
  176. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/__init__.py +0 -0
  177. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/base.py +0 -0
  178. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/ows.py +0 -0
  179. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/template_helper.py +0 -0
  180. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/demo.html +0 -0
  181. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/openlayers-demo.cfg +0 -0
  182. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/blank.gif +0 -0
  183. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/east-mini.png +0 -0
  184. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/north-mini.png +0 -0
  185. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/south-mini.png +0 -0
  186. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/west-mini.png +0 -0
  187. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/zoom-minus-mini.png +0 -0
  188. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/zoom-plus-mini.png +0 -0
  189. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/zoom-world-mini.png +0 -0
  190. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/logo.png +0 -0
  191. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/ol.css +0 -0
  192. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/ol.js +0 -0
  193. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/proj4.min.js +0 -0
  194. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/proj4defs.js +0 -0
  195. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/site.css +0 -0
  196. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/theme/default/framedCloud.css +0 -0
  197. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/theme/default/google.css +0 -0
  198. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/theme/default/ie6-style.css +0 -0
  199. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/theme/default/style.css +0 -0
  200. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static.html +0 -0
  201. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/tms_demo.html +0 -0
  202. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/wms_demo.html +0 -0
  203. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/demo/wmts_demo.html +0 -0
  204. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/tms_capabilities.xml +0 -0
  205. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/tms_exception.xml +0 -0
  206. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/tms_root_resource.xml +0 -0
  207. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/tms_tilemap_capabilities.xml +0 -0
  208. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/wms100capabilities.xml +0 -0
  209. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/wms100exception.xml +0 -0
  210. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/wms110capabilities.xml +0 -0
  211. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/wms110exception.xml +0 -0
  212. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/wms111capabilities.xml +0 -0
  213. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/wms111exception.xml +0 -0
  214. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/wms130capabilities.xml +0 -0
  215. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/wms130exception.xml +0 -0
  216. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/templates/wmts100exception.xml +0 -0
  217. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/service/wms.py +0 -0
  218. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/source/__init__.py +0 -0
  219. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/source/arcgis.py +0 -0
  220. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/source/error.py +0 -0
  221. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/source/tile.py +0 -0
  222. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/source/wms.py +0 -0
  223. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/srs.py +0 -0
  224. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/__init__.py +0 -0
  225. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/conftest.py +0 -0
  226. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/helper.py +0 -0
  227. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/http.py +0 -0
  228. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/image.py +0 -0
  229. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/mocker.py +0 -0
  230. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/common.xsd +0 -0
  231. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_bul.xsd +0 -0
  232. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_cze.xsd +0 -0
  233. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dan.xsd +0 -0
  234. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dut.xsd +0 -0
  235. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_eng.xsd +0 -0
  236. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_est.xsd +0 -0
  237. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fin.xsd +0 -0
  238. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fre.xsd +0 -0
  239. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ger.xsd +0 -0
  240. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gle.xsd +0 -0
  241. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gre.xsd +0 -0
  242. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_hun.xsd +0 -0
  243. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ita.xsd +0 -0
  244. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lav.xsd +0 -0
  245. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lit.xsd +0 -0
  246. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_mlt.xsd +0 -0
  247. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_pol.xsd +0 -0
  248. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_por.xsd +0 -0
  249. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_rum.xsd +0 -0
  250. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slo.xsd +0 -0
  251. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slv.xsd +0 -0
  252. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_spa.xsd +0 -0
  253. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_swe.xsd +0 -0
  254. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/network.xsd +0 -0
  255. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/inspire_vs/1.0/inspire_vs.xsd +0 -0
  256. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/kml/2.2.0/ReadMe.txt +0 -0
  257. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/kml/2.2.0/atom-author-link.xsd +0 -0
  258. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/kml/2.2.0/ogckml22.xsd +0 -0
  259. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/kml/2.2.0/xAL.xsd +0 -0
  260. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/ReadMe.txt +0 -0
  261. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/ows19115subset.xsd +0 -0
  262. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsAll.xsd +0 -0
  263. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsCommon.xsd +0 -0
  264. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsContents.xsd +0 -0
  265. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsDataIdentification.xsd +0 -0
  266. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsDomainType.xsd +0 -0
  267. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsExceptionReport.xsd +0 -0
  268. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsGetCapabilities.xsd +0 -0
  269. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsGetResourceByID.xsd +0 -0
  270. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsInputOutputData.xsd +0 -0
  271. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsManifest.xsd +0 -0
  272. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsOperationsMetadata.xsd +0 -0
  273. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsServiceIdentification.xsd +0 -0
  274. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsServiceProvider.xsd +0 -0
  275. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/sld/1.1.0/sld_capabilities.xsd +0 -0
  276. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.dtd +0 -0
  277. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.xml +0 -0
  278. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.dtd +0 -0
  279. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.xml +0 -0
  280. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.dtd +0 -0
  281. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.xml +0 -0
  282. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.dtd +0 -0
  283. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.xml +0 -0
  284. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/OGC-exception.xsd +0 -0
  285. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
  286. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd +0 -0
  287. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd +0 -0
  288. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.dtd +0 -0
  289. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.xml +0 -0
  290. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.dtd +0 -0
  291. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.xml +0 -0
  292. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.3.0/ReadMe.txt +0 -0
  293. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xml +0 -0
  294. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xsd +0 -0
  295. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xml +0 -0
  296. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xsd +0 -0
  297. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/OGC-exception.xsd +0 -0
  298. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
  299. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/WMS_MS_Capabilities.dtd +0 -0
  300. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/WMS_exception_1_1_1.dtd +0 -0
  301. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.dtd +0 -0
  302. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.xml +0 -0
  303. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.dtd +0 -0
  304. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.xml +0 -0
  305. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/ReadMe.txt +0 -0
  306. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmts.xsd +0 -0
  307. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsAbstract.wsdl +0 -0
  308. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_request.xsd +0 -0
  309. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_response.xsd +0 -0
  310. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_request.xsd +0 -0
  311. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_response.xsd +0 -0
  312. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsGetTile_request.xsd +0 -0
  313. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsKVP.xsd +0 -0
  314. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsPayload_response.xsd +0 -0
  315. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/xlink/1.0.0/ReadMe.txt +0 -0
  316. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/xlink/1.0.0/xlinks.xsd +0 -0
  317. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/schemas/xml.xsd +0 -0
  318. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/__init__.py +0 -0
  319. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/arcgis.yaml +0 -0
  320. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/auth.yaml +0 -0
  321. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache.mbtiles +0 -0
  322. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_azureblob.yaml +0 -0
  323. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_band_merge.yaml +0 -0
  324. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_bulk_meta_tiles.yaml +0 -0
  325. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_coverage.yaml +0 -0
  326. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png +0 -0
  327. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_data/wms_cache_EPSG900913/01/000/000/000/000/000/001.jpeg +0 -0
  328. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_data/wms_cache_transparent_EPSG900913/01/000/000/000/000/000/001.png +0 -0
  329. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_geopackage.yaml +0 -0
  330. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_grid_names.yaml +0 -0
  331. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_mbtiles.yaml +0 -0
  332. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_s3.yaml +0 -0
  333. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_source.yaml +0 -0
  334. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/combined_sources.yaml +0 -0
  335. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/coverage.yaml +0 -0
  336. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/demo.yaml +0 -0
  337. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/dimension.yaml +0 -0
  338. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/disable_storage.yaml +0 -0
  339. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/empty_ogrdata.geojson +0 -0
  340. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/formats.yaml +0 -0
  341. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/inspire.yaml +0 -0
  342. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/inspire_full.yaml +0 -0
  343. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/kml_layer.yaml +0 -0
  344. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/layer.yaml +0 -0
  345. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/layergroups.yaml +0 -0
  346. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/layergroups_root.yaml +0 -0
  347. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/mapnik_source.yaml +0 -0
  348. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/mapproxy_export.yaml +0 -0
  349. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/mapserver.yaml +0 -0
  350. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/minimal_cgi.py +0 -0
  351. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/mixed_mode.yaml +0 -0
  352. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/multi_cache_layers.yaml +0 -0
  353. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/multiapp1.yaml +0 -0
  354. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/multiapp2.yaml +0 -0
  355. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/renderd_client.yaml +0 -0
  356. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/scalehints.yaml +0 -0
  357. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/seed.yaml +0 -0
  358. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/seed_mapproxy.yaml +0 -0
  359. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/seed_old.yaml +0 -0
  360. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/seed_timeouts.yaml +0 -0
  361. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/seed_timeouts_mapproxy.yaml +0 -0
  362. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/seedonly.yaml +0 -0
  363. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/sld.yaml +0 -0
  364. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/source_errors.yaml +0 -0
  365. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/source_errors_raise.yaml +0 -0
  366. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/tileservice_origin.yaml +0 -0
  367. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/tileservice_refresh.yaml +0 -0
  368. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/tilesource_minmax_res.yaml +0 -0
  369. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util-conf-base-grids.yaml +0 -0
  370. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util-conf-overwrite.yaml +0 -0
  371. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util-conf-wms-111-cap.xml +0 -0
  372. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util_wms_capabilities111.xml +0 -0
  373. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util_wms_capabilities130.xml +0 -0
  374. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util_wms_capabilities_service_exception.xml +0 -0
  375. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/watermark.yaml +0 -0
  376. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/wms_srs_extent.yaml +0 -0
  377. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/wms_versions.yaml +0 -0
  378. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/wmts.yaml +0 -0
  379. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/wmts_dimensions.yaml +0 -0
  380. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/xslt_featureinfo.yaml +0 -0
  381. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/fixture/xslt_featureinfo_input.yaml +0 -0
  382. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_arcgis.py +0 -0
  383. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_auth.py +0 -0
  384. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_behind_proxy.py +0 -0
  385. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_bulk_meta_tiles.py +0 -0
  386. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_azureblob.py +0 -0
  387. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_band_merge.py +0 -0
  388. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_coverage.py +0 -0
  389. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_geopackage.py +0 -0
  390. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_grid_names.py +0 -0
  391. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_mbtiles.py +0 -0
  392. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_s3.py +0 -0
  393. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_source.py +0 -0
  394. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_combined_sources.py +0 -0
  395. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_coverage.py +0 -0
  396. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_decorate_img.py +0 -0
  397. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_demo_with_extra_service.py +0 -0
  398. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_dimensions.py +0 -0
  399. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_disable_storage.py +0 -0
  400. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_formats.py +0 -0
  401. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_inspire_vs.py +0 -0
  402. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_kml.py +0 -0
  403. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_layergroups.py +0 -0
  404. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_mapnik.py +0 -0
  405. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_mixed_mode_format.py +0 -0
  406. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_multi_cache_layers.py +0 -0
  407. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_multiapp.py +0 -0
  408. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_refresh.py +0 -0
  409. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_renderd_client.py +0 -0
  410. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_response_headers.py +0 -0
  411. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_scalehints.py +0 -0
  412. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_seed.py +0 -0
  413. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_seed_only.py +0 -0
  414. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_sld.py +0 -0
  415. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_source_errors.py +0 -0
  416. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_tilesource_minmax_res.py +0 -0
  417. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_tms.py +0 -0
  418. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_tms_origin.py +0 -0
  419. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_util_conf.py +0 -0
  420. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_util_export.py +0 -0
  421. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_util_grids.py +0 -0
  422. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_util_wms_capabilities.py +0 -0
  423. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_watermark.py +0 -0
  424. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_wms.py +0 -0
  425. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_wms_srs_extent.py +0 -0
  426. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_wms_version.py +0 -0
  427. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_wmsc.py +0 -0
  428. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_wmts.py +0 -0
  429. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_wmts_dimensions.py +0 -0
  430. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_wmts_restful.py +0 -0
  431. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/system/test_xslt_featureinfo.py +0 -0
  432. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/test_http_helper.py +0 -0
  433. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/__init__.py +0 -0
  434. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/epsg +0 -0
  435. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/polygons/polygons.dbf +0 -0
  436. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/polygons/polygons.shp +0 -0
  437. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/polygons/polygons.shx +0 -0
  438. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_async.py +0 -0
  439. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_auth.py +0 -0
  440. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache.py +0 -0
  441. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_azureblob.py +0 -0
  442. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_compact.py +0 -0
  443. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_couchdb.py +0 -0
  444. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_geopackage.py +0 -0
  445. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_redis.py +0 -0
  446. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_riak.py +0 -0
  447. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_s3.py +0 -0
  448. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_tile.py +0 -0
  449. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_client_arcgis.py +0 -0
  450. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_collections.py +0 -0
  451. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_concat_legends.py +0 -0
  452. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_conf_loader.py +0 -0
  453. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_conf_validator.py +0 -0
  454. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_config.py +0 -0
  455. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_decorate_img.py +0 -0
  456. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_exceptions.py +0 -0
  457. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_file_lock_load.py +0 -0
  458. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_geom.py +0 -0
  459. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_grid.py +0 -0
  460. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_image.py +0 -0
  461. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_image_mask.py +0 -0
  462. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_image_messages.py +0 -0
  463. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_image_options.py +0 -0
  464. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_isodate.py +0 -0
  465. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_multiapp.py +0 -0
  466. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_ogr_reader.py +0 -0
  467. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_request.py +0 -0
  468. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_request_wmts.py +0 -0
  469. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_response.py +0 -0
  470. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_seed.py +0 -0
  471. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_seed_cachelock.py +0 -0
  472. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_srs.py +0 -0
  473. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_tiled_source.py +0 -0
  474. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_tilefilter.py +0 -0
  475. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_times.py +0 -0
  476. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_timeutils.py +0 -0
  477. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_util_conf_utils.py +0 -0
  478. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_utils.py +0 -0
  479. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_wms_capabilities.py +0 -0
  480. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_wms_layer.py +0 -0
  481. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/test/unit/test_yaml.py +0 -0
  482. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/tilefilter.py +0 -0
  483. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/__init__.py +0 -0
  484. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/async_.py +0 -0
  485. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/collections.py +0 -0
  486. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/coverage.py +0 -0
  487. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/__init__.py +0 -0
  488. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/dictspec/__init__.py +0 -0
  489. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/dictspec/spec.py +0 -0
  490. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/dictspec/test/__init__.py +0 -0
  491. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/dictspec/test/test_validator.py +0 -0
  492. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/dictspec/validator.py +0 -0
  493. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/local.py +0 -0
  494. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/lockfile.py +0 -0
  495. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/serving.py +0 -0
  496. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/tempita/__init__.py +0 -0
  497. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/tempita/_looper.py +0 -0
  498. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/tempita/string_utils.py +0 -0
  499. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/__init__.py +0 -0
  500. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/duration.py +0 -0
  501. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/parse.py +0 -0
  502. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/__init__.py +0 -0
  503. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/test_parse.py +0 -0
  504. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/test_util.py +0 -0
  505. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/wms-example-111.xml +0 -0
  506. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/wms-example-130.xml +0 -0
  507. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/wms-large-111.xml +0 -0
  508. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml +0 -0
  509. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/util.py +0 -0
  510. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/fs.py +0 -0
  511. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/geom.py +0 -0
  512. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/lib.py +0 -0
  513. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/lock.py +0 -0
  514. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/ogr.py +0 -0
  515. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/py.py +0 -0
  516. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/times.py +0 -0
  517. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/util/yaml.py +0 -0
  518. {MapProxy-2.1.1 → mapproxy-2.2.1}/mapproxy/version.py +0 -0
  519. {MapProxy-2.1.1 → mapproxy-2.2.1}/requirements-tests.txt +0 -0
  520. {MapProxy-2.1.1 → mapproxy-2.2.1}/setup.cfg +0 -0
@@ -1,3 +1,34 @@
1
+ 2.2.1 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
+ 2.2.0 2024-07-24
11
+ ~~~~~~~~~~~~~~~~
12
+
13
+ Improvements:
14
+
15
+ - Add timeout to SQLite connect for geopackages. This helps against locking exceptions
16
+ - Improvement of documentation, typos, wrong cli commands, old python2 stuff
17
+ - The WMTS capabilites will now advertise the WMS GetLegendGraphic as a LegendURL if both services are active
18
+ - It is possible now to configure LegendURLs that should be shown in the WMTS capabilities
19
+ - A new method for plugins to intercept and modify requests made to MapProxy was added.
20
+
21
+ Maintenance:
22
+
23
+ - Removal of debian package information
24
+ - Fix docs workflow
25
+
26
+ Fixes:
27
+
28
+ - Remove import of the packaging library that does not appear in the `install_requires`
29
+ - Only install and use `importlib_resources` in python 3.8
30
+
31
+
1
32
  2.1.1 2024-07-16
2
33
  ~~~~~~~~~~~~~~~~
3
34
  Fixes:
@@ -1,12 +1,11 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: MapProxy
3
- Version: 2.1.1
3
+ Version: 2.2.1
4
4
  Summary: An accelerating proxy for tile and web map services
5
5
  Home-page: https://mapproxy.org
6
6
  Author: Oliver Tonnhofer
7
7
  Author-email: olt@omniscale.de
8
8
  License: Apache Software License 2.0
9
- Platform: UNKNOWN
10
9
  Classifier: Development Status :: 5 - Production/Stable
11
10
  Classifier: License :: OSI Approved :: Apache Software License
12
11
  Classifier: Operating System :: OS Independent
@@ -21,6 +20,22 @@ Classifier: Topic :: Scientific/Engineering :: GIS
21
20
  License-File: LICENSE.txt
22
21
  License-File: COPYING.txt
23
22
  License-File: AUTHORS.txt
23
+ Requires-Dist: PyYAML>=3.0
24
+ Requires-Dist: future
25
+ Requires-Dist: pyproj>=2
26
+ Requires-Dist: jsonschema>=4
27
+ Requires-Dist: importlib_resources; python_version <= "3.8"
28
+ Requires-Dist: werkzeug==1.0.1
29
+ Requires-Dist: Pillow!=2.4.0,!=8.3.0,!=8.3.1
30
+ Dynamic: author
31
+ Dynamic: author-email
32
+ Dynamic: classifier
33
+ Dynamic: description
34
+ Dynamic: home-page
35
+ Dynamic: license
36
+ Dynamic: license-file
37
+ Dynamic: requires-dist
38
+ Dynamic: summary
24
39
 
25
40
  MapProxy is an open source proxy for geospatial data. It caches, accelerates and transforms data from existing map services and serves any desktop or web GIS client.
26
41
 
@@ -34,6 +49,37 @@ The documentation is available at: http://mapproxy.github.io/mapproxy/latest/
34
49
 
35
50
  Changes
36
51
  -------
52
+ 2.2.1 2025-04-10
53
+ ~~~~~~~~~~~~~~~~
54
+
55
+ Fixes:
56
+
57
+ - Security fix to prevent XSS injections in demo pages
58
+ - Security fix to prevent reading file urls
59
+
60
+
61
+ 2.2.0 2024-07-24
62
+ ~~~~~~~~~~~~~~~~
63
+
64
+ Improvements:
65
+
66
+ - Add timeout to SQLite connect for geopackages. This helps against locking exceptions
67
+ - Improvement of documentation, typos, wrong cli commands, old python2 stuff
68
+ - The WMTS capabilites will now advertise the WMS GetLegendGraphic as a LegendURL if both services are active
69
+ - It is possible now to configure LegendURLs that should be shown in the WMTS capabilities
70
+ - A new method for plugins to intercept and modify requests made to MapProxy was added.
71
+
72
+ Maintenance:
73
+
74
+ - Removal of debian package information
75
+ - Fix docs workflow
76
+
77
+ Fixes:
78
+
79
+ - Remove import of the packaging library that does not appear in the `install_requires`
80
+ - Only install and use `importlib_resources` in python 3.8
81
+
82
+
37
83
  2.1.1 2024-07-16
38
84
  ~~~~~~~~~~~~~~~~
39
85
  Fixes:
@@ -114,41 +160,7 @@ Fixes:
114
160
  - Some more minor fixups
115
161
 
116
162
 
117
- 1.16.0 2023-04-13
118
- ~~~~~~~~~~~~~~~~~
119
- Breaking:
120
-
121
- - Removal of old unsupported python versions 2.7 and 3.6
122
- - Tested python version range is now 3.7 to 3.11
123
- - Lots of dependency updates
124
-
125
- Improvements:
126
-
127
- - New cache: Azure Blob storage
128
- - Lots of dependency updates
129
- - Support for JSON legends
130
- - Updated layer preview to use latest openlayers
131
- - Official docker images released, documentation updated
132
-
133
- Fixes:
134
-
135
- - Fixed issues with sqlite cache (#629 and #625)
136
- - Dependency correction
137
- - library detection difficulties on some operating systems
138
- - encoding issues with umlauts in featureinfo
139
- - Several minor bugfixes
140
- - mapproxy-util export - derive image format from cache config
141
-
142
- 1.15.1 2022-06-14
143
- ~~~~~~~~~~~~~~~~~
144
-
145
- Fixes:
146
-
147
- - Fixup release on PyPI
148
-
149
163
 
150
164
  Older changes
151
165
  -------------
152
166
  See https://raw.github.com/mapproxy/mapproxy/master/CHANGES.txt
153
-
154
-
@@ -482,6 +482,7 @@ mapproxy/util/__init__.py
482
482
  mapproxy/util/async_.py
483
483
  mapproxy/util/collections.py
484
484
  mapproxy/util/coverage.py
485
+ mapproxy/util/escape.py
485
486
  mapproxy/util/fs.py
486
487
  mapproxy/util/geom.py
487
488
  mapproxy/util/lib.py
@@ -1,4 +1,3 @@
1
1
  [console_scripts]
2
2
  mapproxy-seed = mapproxy.seed.script:main
3
3
  mapproxy-util = mapproxy.script.util:main
4
-
@@ -1,7 +1,9 @@
1
- Pillow!=2.4.0,!=8.3.0,!=8.3.1
2
1
  PyYAML>=3.0
3
2
  future
4
- importlib_resources
5
- jsonschema>=4
6
3
  pyproj>=2
4
+ jsonschema>=4
7
5
  werkzeug==1.0.1
6
+ Pillow!=2.4.0,!=8.3.0,!=8.3.1
7
+
8
+ [:python_version <= "3.8"]
9
+ importlib_resources
@@ -1,12 +1,11 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: MapProxy
3
- Version: 2.1.1
3
+ Version: 2.2.1
4
4
  Summary: An accelerating proxy for tile and web map services
5
5
  Home-page: https://mapproxy.org
6
6
  Author: Oliver Tonnhofer
7
7
  Author-email: olt@omniscale.de
8
8
  License: Apache Software License 2.0
9
- Platform: UNKNOWN
10
9
  Classifier: Development Status :: 5 - Production/Stable
11
10
  Classifier: License :: OSI Approved :: Apache Software License
12
11
  Classifier: Operating System :: OS Independent
@@ -21,6 +20,22 @@ Classifier: Topic :: Scientific/Engineering :: GIS
21
20
  License-File: LICENSE.txt
22
21
  License-File: COPYING.txt
23
22
  License-File: AUTHORS.txt
23
+ Requires-Dist: PyYAML>=3.0
24
+ Requires-Dist: future
25
+ Requires-Dist: pyproj>=2
26
+ Requires-Dist: jsonschema>=4
27
+ Requires-Dist: importlib_resources; python_version <= "3.8"
28
+ Requires-Dist: werkzeug==1.0.1
29
+ Requires-Dist: Pillow!=2.4.0,!=8.3.0,!=8.3.1
30
+ Dynamic: author
31
+ Dynamic: author-email
32
+ Dynamic: classifier
33
+ Dynamic: description
34
+ Dynamic: home-page
35
+ Dynamic: license
36
+ Dynamic: license-file
37
+ Dynamic: requires-dist
38
+ Dynamic: summary
24
39
 
25
40
  MapProxy is an open source proxy for geospatial data. It caches, accelerates and transforms data from existing map services and serves any desktop or web GIS client.
26
41
 
@@ -34,6 +49,37 @@ The documentation is available at: http://mapproxy.github.io/mapproxy/latest/
34
49
 
35
50
  Changes
36
51
  -------
52
+ 2.2.1 2025-04-10
53
+ ~~~~~~~~~~~~~~~~
54
+
55
+ Fixes:
56
+
57
+ - Security fix to prevent XSS injections in demo pages
58
+ - Security fix to prevent reading file urls
59
+
60
+
61
+ 2.2.0 2024-07-24
62
+ ~~~~~~~~~~~~~~~~
63
+
64
+ Improvements:
65
+
66
+ - Add timeout to SQLite connect for geopackages. This helps against locking exceptions
67
+ - Improvement of documentation, typos, wrong cli commands, old python2 stuff
68
+ - The WMTS capabilites will now advertise the WMS GetLegendGraphic as a LegendURL if both services are active
69
+ - It is possible now to configure LegendURLs that should be shown in the WMTS capabilities
70
+ - A new method for plugins to intercept and modify requests made to MapProxy was added.
71
+
72
+ Maintenance:
73
+
74
+ - Removal of debian package information
75
+ - Fix docs workflow
76
+
77
+ Fixes:
78
+
79
+ - Remove import of the packaging library that does not appear in the `install_requires`
80
+ - Only install and use `importlib_resources` in python 3.8
81
+
82
+
37
83
  2.1.1 2024-07-16
38
84
  ~~~~~~~~~~~~~~~~
39
85
  Fixes:
@@ -114,41 +160,7 @@ Fixes:
114
160
  - Some more minor fixups
115
161
 
116
162
 
117
- 1.16.0 2023-04-13
118
- ~~~~~~~~~~~~~~~~~
119
- Breaking:
120
-
121
- - Removal of old unsupported python versions 2.7 and 3.6
122
- - Tested python version range is now 3.7 to 3.11
123
- - Lots of dependency updates
124
-
125
- Improvements:
126
-
127
- - New cache: Azure Blob storage
128
- - Lots of dependency updates
129
- - Support for JSON legends
130
- - Updated layer preview to use latest openlayers
131
- - Official docker images released, documentation updated
132
-
133
- Fixes:
134
-
135
- - Fixed issues with sqlite cache (#629 and #625)
136
- - Dependency correction
137
- - library detection difficulties on some operating systems
138
- - encoding issues with umlauts in featureinfo
139
- - Several minor bugfixes
140
- - mapproxy-util export - derive image format from cache config
141
-
142
- 1.15.1 2022-06-14
143
- ~~~~~~~~~~~~~~~~~
144
-
145
- Fixes:
146
-
147
- - Fixup release on PyPI
148
-
149
163
 
150
164
  Older changes
151
165
  -------------
152
166
  See https://raw.github.com/mapproxy/mapproxy/master/CHANGES.txt
153
-
154
-
@@ -3,9 +3,9 @@ Configuration
3
3
 
4
4
  There are two configuration files used by MapProxy.
5
5
 
6
- ``mappproxy.yaml``
6
+ ``mapproxy.yaml``
7
7
  This is the main configuration of MapProxy. It configures all aspects of the server:
8
- Which servers should be started, where comes the data from, what should be cached,
8
+ which servers should be started, where comes the data from, what should be cached,
9
9
  etc..
10
10
 
11
11
  ``seed.yaml``
@@ -31,7 +31,7 @@ The MapProxy configuration is grouped into sections, each configures a different
31
31
 
32
32
  - ``layers``: Configure the layers that MapProxy offers. Each layer can consist of multiple sources and caches.
33
33
 
34
- - ``grids``: Define the grids that MapProxy uses to aligns cached images.
34
+ - ``grids``: Define the grids that MapProxy uses to align cached images.
35
35
 
36
36
  The order of the sections is not important, so you can organize it your way.
37
37
 
@@ -69,7 +69,7 @@ There are other optional sections:
69
69
 
70
70
  The ``base`` option loads the other files and merges the loaded configuration dictionaries together – it is not a literal include of the other files.
71
71
 
72
- For example, to externalize ``grids`` and ``caches``sections, we will have in ``mappproxy.yaml``:
72
+ For example, to externalize ``grids`` and ``caches`` sections, we will have in ``mapproxy.yaml``:
73
73
 
74
74
  .. code-block:: YAML
75
75
 
@@ -77,7 +77,7 @@ There are other optional sections:
77
77
  service: ...
78
78
  layers: ...
79
79
 
80
- Also in more complex configurations (with many layers, caches, sources, etc.), the ``mappproxy.yaml`` can become too big to be easily modified. One solution could be to split layers, caches, sources, etc. by themes: for example, nature (with layers for lakes, rivers, forests), artificial building (with roads, buildings, power plants layers), topography, etc. We could have in ``mappproxy.yaml``:
80
+ Also in more complex configurations (with many layers, caches, sources, etc.), the ``mapproxy.yaml`` can become too big to be easily modified. One solution could be to split layers, caches, sources, etc. by themes: for example, nature (with layers for lakes, rivers, forests), artificial building (with roads, buildings, power plants layers), topography, etc. We could have in ``mapproxy.yaml``:
81
81
 
82
82
  .. code-block:: YAML
83
83
 
@@ -304,7 +304,7 @@ Please read :ref:`scale vs. resolution <scale_resolution>` for some notes on `sc
304
304
  ``legendurl``
305
305
  """""""""""""
306
306
 
307
- Configure a URL to an image that should be returned as the legend for this layer. Local URLs (``file://``) are also supported. MapProxy ignores the legends from the sources of this layer if you configure a ``legendurl`` here.
307
+ Configure a URL to an image that should be returned as the legend for this layer. Local URLs (``file://``) are also supported. MapProxy ignores the legends from the sources of this layer if you configure a ``legendurl`` here. If WMS and WMTS are enabled the address to the WMS `GetLegendGraphic` endpoint will be included in the WMTS capabilities as the legend url.
308
308
 
309
309
  .. _layer_metadata:
310
310
 
@@ -392,6 +392,21 @@ Each dimension is another dictionary with a list of ``values`` and an optional `
392
392
  - 1000
393
393
  - 3000
394
394
 
395
+ ``wmts_kvp_legendurl`` and ``wmts_rest_legendurl``
396
+ """"""""""""""""""""""""""""""""""""""""""""""""""
397
+
398
+ It is possible to configure which URLS the WMTS will advertise as LegendURLs through its capabilities. These will be
399
+ inserted as a ``LegendURL`` tag into the capabilities document. These URLs support two template variables ``{base_url}``
400
+ which is the base url of MapProxy and ``{layer_name}`` which is the name of the layer.
401
+
402
+ .. code-block:: yaml
403
+
404
+ layers:
405
+ - name: legend_layer
406
+ tile_sources: [cache]
407
+ wmts_rest_legendurl: "{base_url}/legend/{layer_name}.png" # would become "http://127.0.0.1/legend/legend_layer.png" on localhost
408
+ wmts_kvp_legendurl: "http://external-service/fixed-name.png" # would be used as a fixed URL
409
+
395
410
 
396
411
  .. ``attribution``
397
412
  .. """"""""""""""""
@@ -499,7 +514,7 @@ You need to set the ``request_format`` to ``image/png`` when using ``mixed``-mod
499
514
  ``request_format``
500
515
  """"""""""""""""""
501
516
 
502
- MapProxy will try to use this format to request new tiles, if it is not set ``format`` is used. This option has no effect if the source does not support that format or the format of the source is set explicitly (see ``suported_format`` or ``format`` for sources).
517
+ MapProxy will try to use this format to request new tiles, if it is not set ``format`` is used. This option has no effect if the source does not support that format or the format of the cache is set explicitly (see ``format`` for caches or ``supported_formats`` for sources).
503
518
 
504
519
 
505
520
  .. _link_single_color_images:
@@ -989,7 +1004,7 @@ The following options define how tiles are created and stored. Most options can
989
1004
  .. _meta_size:
990
1005
 
991
1006
  ``meta_size``
992
- MapProxy does not make a single request for every tile it needs, but it will request a large meta-tile that consist of multiple tiles. ``meta_size`` defines how large a meta-tile is. A ``meta_size`` of ``[4, 4]`` will request 16 tiles in one pass. With a tile size of 256x256 this will result in 1024x1024 requests to the source. Tiled sources are still requested tile by tile, but you can configure MapProxy to load multiple tiles in bulk with `bulk_meta_tiles`.
1007
+ MapProxy does not make a single request for every tile it needs, but it will request a large meta-tile that consist of multiple tiles. ``meta_size`` defines how large a meta-tile is. A ``meta_size`` of ``[4, 4]`` will request 16 tiles in one pass. With a tile size of 256x256 this will result in 1024x1024 requests to the source. Tiled sources are still requested tile by tile, but you can configure MapProxy to load multiple tiles in bulk with ``bulk_meta_tiles``.
993
1008
 
994
1009
 
995
1010
  .. _bulk_meta_tiles:
@@ -1135,7 +1150,7 @@ See the `Python SSL documentation <http://docs.python.org/dev/library/ssl.html#s
1135
1150
 
1136
1151
  .. versionadded:: 1.11.0
1137
1152
 
1138
- MapProxy uses the systems CA files by default, if you use Python >=2.7.9 or >=3.4.
1153
+ MapProxy uses the systems CA files by default.
1139
1154
 
1140
1155
 
1141
1156
  .. note::
@@ -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
@@ -28,7 +28,7 @@ __ fork_
28
28
  Documentation
29
29
  -------------
30
30
 
31
- This is the documentation you are reading right now. The raw files can be found in ``doc/``. The HTML version user documentation is build with `Sphinx`_. To rebuild this documentation install Sphinx with ``pip install sphinx sphinx-bootstrap-theme`` and call ``python setup.py build_sphinx``. The output appears in ``build/sphinx/html``. The latest documentation can be found at ``http://mapproxy.org/docs/lates/``.
31
+ This is the documentation you are reading right now. The raw files can be found in ``doc/``. The HTML version user documentation is build with `Sphinx`_. To rebuild this documentation install Sphinx with ``pip install sphinx sphinx-bootstrap-theme`` and call ``sphinx-build doc/ docs``. The output appears in ``docs``. The latest documentation can be found at ``https://mapproxy.github.io/mapproxy/latest/``.
32
32
 
33
33
  .. _`Epydoc`: http://epydoc.sourceforge.net/
34
34
  .. _`Sphinx`: http://sphinx.pocoo.org/
@@ -5,9 +5,9 @@ This tutorial guides you to the MapProxy installation process on Unix systems. F
5
5
 
6
6
  This tutorial was created and tested with Debian and Ubuntu, if you're installing MapProxy on a different system you might need to change some package names.
7
7
 
8
- MapProxy is `registered at the Python Package Index <https://pypi.org/project/MapProxy/>`_ (PyPI). If you have Python 2.7.9 or higher, you can install MapProxy with::
8
+ MapProxy is `registered at the Python Package Index <https://pypi.org/project/MapProxy/>`_ (PyPI). If you have Python 3.8 or higher, you can install MapProxy with::
9
9
 
10
- sudo python -m pip install MapProxy
10
+ python -m pip install MapProxy
11
11
 
12
12
  This is really, easy `but` we recommend to install MapProxy into a `virtual Python environment`_. A ``virtualenv`` is a self-contained Python installation where you can install arbitrary Python packages without affecting the system installation. You also don't need root permissions for the installation.
13
13
 
@@ -11,7 +11,7 @@ Virtualenv
11
11
 
12
12
  To create a new virtual environment for your MapProxy installation and to activate it go to the command line and call::
13
13
 
14
- C:\Python27\python path\to\virtualenv.py c:\mapproxy_venv
14
+ C:\Python38\python path\to\virtualenv.py c:\mapproxy_venv
15
15
  C:\mapproxy_venv\Scripts\activate.bat
16
16
 
17
17
  .. note::
@@ -30,11 +30,9 @@ This might take a minute. You can skip the next step.
30
30
  PIP
31
31
  ---
32
32
 
33
- MapProxy and most dependencies can be installed with the ``pip`` command. ``pip`` is already installed if you are using Python >=2.7.9, or Python >=3.4. `Read the pip documentation for more information <https://pip.pypa.io/en/stable/installing/>`_.
33
+ MapProxy and most dependencies can be installed with the ``pip`` command. `Read the pip documentation for more information <https://pip.pypa.io/en/stable/installing/>`_.
34
34
 
35
- After that you can install MapProxy with::
36
-
37
- c:\Python27\Scripts\pip install MapProxy
35
+ c:\Python38\Scripts\pip install MapProxy
38
36
 
39
37
  This might take a minute.
40
38
 
@@ -90,7 +88,7 @@ Platform dependent packages
90
88
 
91
89
  ``pip`` downloads all packages from https://pypi.org/, but not all platform combinations might be available as a binary package, especially if you run a 64bit version of Python.
92
90
 
93
- If you run into trouble during installation, because it is trying to compile something (e.g. complaining about ``vcvarsall.bat``), you should look at Christoph Gohlke's `Unofficial Windows Binaries for Python Extension Packages <http://www.lfd.uci.edu/~gohlke/pythonlibs/>`_. This is a reliable site for binary packages for Python. You need to download the right package: The ``cpxx`` code refers to the Python version (e.g. ``cp27`` for Python 2.7); ``win32`` for 32bit Python installations and ``amd64`` for 64bit.
91
+ If you run into trouble during installation, because it is trying to compile something (e.g. complaining about ``vcvarsall.bat``), you should look at Christoph Gohlke's `Unofficial Windows Binaries for Python Extension Packages <http://www.lfd.uci.edu/~gohlke/pythonlibs/>`_. This is a reliable site for binary packages for Python. You need to download the right package: The ``cpxx`` code refers to the Python version (e.g. ``cp38`` for Python 3.8); ``win32`` for 32bit Python installations and ``amd64`` for 64bit.
94
92
 
95
93
  You can install the ``.whl``, ``.zip`` or ``.exe`` packages with ``pip``::
96
94
 
@@ -292,9 +292,33 @@ This can for example be used like in the following snippet:
292
292
  })
293
293
 
294
294
 
295
- A real-world example can be found at
296
- https://github.com/rouault/mapproxy_hips/blob/master/mapproxy_hips/script/hipsallsky.py
297
- `
295
+ A real-world example can be found at https://github.com/rouault/mapproxy_hips/blob/master/mapproxy_hips/script/hipsallsky.py
296
+
297
+
298
+ Intercepting request
299
+ --------------------
300
+
301
+ It is possible to intercept any request in a plugin with `register_request_interceptor`. The provided function will be called on any request and should
302
+ always return a request, either the original one or a new one.
303
+
304
+ Example:
305
+
306
+ .. code-block:: python
307
+
308
+ from mapproxy.wsgiapp import register_request_interceptor
309
+
310
+ def interceptor(req):
311
+ if req.path.startswith('service'):
312
+ environ = req.environ.copy()
313
+ environ['QUERY_STRING'] = environ['QUERY_STRING'].replace('foo', 'bar')
314
+ return Request(environ)
315
+ return req
316
+
317
+ register_request_interceptor(interceptor)
318
+
319
+
320
+ A real world example can be found at https://github.com/mapproxy/wmts-rest-legend-plugin
321
+
298
322
 
299
323
  Credits
300
324
  -------
@@ -137,7 +137,7 @@ You can define XSLT scripts to transform outgoing feature information. You can d
137
137
  ``xml``
138
138
  Define a script for ``INFO_FORMAT=application/vnd.ogc.gml`` and ``INFO_FORMAT=text/xml`` requests.
139
139
 
140
- See :ref:`FeatureInformation for more informaiton <fi_xslt>`.
140
+ See :ref:`FeatureInformation for more information <fi_xslt>`.
141
141
 
142
142
  ``strict``
143
143
  """"""""""
@@ -133,7 +133,7 @@ A list with SRSs that the WMS source supports. MapProxy will only query the sour
133
133
 
134
134
  You don't need to configure this if you only use this WMS as a cache source and the WMS supports all SRS of the cache.
135
135
 
136
- If MapProxy needs to reproject and the source has multiple ``supported_srs``, then it will use the first projected SRS for requests in a projected SRS, or the first geographic SRS for requests in a geographic SRS. E.g when `supported_srs` is ``['EPSG:4326', 'EPSG:31467']`` caches with EPSG:3857 (projected, meter) will use EPSG:31467 (projected, meter) and not EPSG:4326 (geographic, lat/long).
136
+ If MapProxy needs to reproject and the source has multiple ``supported_srs``, then it will use the first projected SRS for requests in a projected SRS, or the first geographic SRS for requests in a geographic SRS. E.g when ``supported_srs`` is ``['EPSG:4326', 'EPSG:31467']`` caches with EPSG:3857 (projected, meter) will use EPSG:31467 (projected, meter) and not EPSG:4326 (geographic, lat/long).
137
137
 
138
138
  .. .. note:: For the configuration of SRS for MapProxy see `srs_configuration`_.
139
139
 
@@ -125,7 +125,7 @@ class GeopackageCache(TileCacheBase):
125
125
  return True
126
126
 
127
127
  def _verify_table(self):
128
- with sqlite3.connect(self.geopackage_file) as db:
128
+ with sqlite3.connect(self.geopackage_file, timeout=self.timeout) as db:
129
129
  cur = db.execute("""SELECT name FROM sqlite_master WHERE type='table' AND name=?""",
130
130
  (self.table_name,))
131
131
  content = cur.fetchone()
@@ -135,7 +135,7 @@ class GeopackageCache(TileCacheBase):
135
135
  return True
136
136
 
137
137
  def _verify_gpkg_contents(self):
138
- with sqlite3.connect(self.geopackage_file) as db:
138
+ with sqlite3.connect(self.geopackage_file, timeout=self.timeout) as db:
139
139
  cur = db.execute("""SELECT * FROM gpkg_contents WHERE table_name = ?""", (self.table_name,))
140
140
 
141
141
  results = cur.fetchone()
@@ -159,7 +159,7 @@ class GeopackageCache(TileCacheBase):
159
159
  return True
160
160
 
161
161
  def _verify_tile_size(self):
162
- with sqlite3.connect(self.geopackage_file) as db:
162
+ with sqlite3.connect(self.geopackage_file, timeout=self.timeout) as db:
163
163
  cur = db.execute(
164
164
  """SELECT * FROM gpkg_tile_matrix WHERE table_name = ?""",
165
165
  (self.table_name,))
@@ -193,7 +193,7 @@ class GeopackageCache(TileCacheBase):
193
193
 
194
194
  def _initialize_gpkg(self):
195
195
  log.info('initializing Geopackage file %s', self.geopackage_file)
196
- db = sqlite3.connect(self.geopackage_file)
196
+ db = sqlite3.connect(self.geopackage_file, timeout=self.timeout)
197
197
 
198
198
  if self.wal:
199
199
  db.execute('PRAGMA journal_mode=wal')
@@ -392,6 +392,14 @@
392
392
  "description": "URL to an image used as a legend for this layer",
393
393
  "type": "string"
394
394
  },
395
+ "wmts_rest_legendurl": {
396
+ "description": "A static legendurl for the wmts rest capabilites",
397
+ "type": "string"
398
+ },
399
+ "wmts_kvp_legendurl": {
400
+ "description": "A static legendurl for the wmts kvp capabilites",
401
+ "type": "string"
402
+ },
395
403
  "md": {
396
404
  "title": "md",
397
405
  "description": "Additional metadata for this layer",
@@ -1950,13 +1950,26 @@ class LayerConfiguration(ConfigurationBase):
1950
1950
  md['format'] = self.context.caches[cache_name].image_opts().format
1951
1951
  md['cache_name'] = cache_name
1952
1952
  md['extent'] = extent
1953
+ md['wmts_kvp_legendurl'] = self.conf.get('wmts_kvp_legendurl')
1954
+ md['wmts_rest_legendurl'] = self.conf.get('wmts_rest_legendurl')
1955
+ if 'legendurl' in self.conf:
1956
+ wms_conf = self.context.services.conf.get('wms')
1957
+ if wms_conf is not None:
1958
+ versions = wms_conf.get('versions', ['1.3.0'])
1959
+ versions.sort(key=lambda s: [int(u) for u in s.split('.')])
1960
+ legendurl = (f'{{base_url}}/service?service=WMS&amp;request=GetLegendGraphic&amp;'
1961
+ f'version={versions[-1]}&amp;format=image%2Fpng&amp;layer={{layer_name}}')
1962
+ if md['wmts_kvp_legendurl'] is None:
1963
+ md['wmts_kvp_legendurl'] = legendurl
1964
+ if md['wmts_rest_legendurl'] is None:
1965
+ md['wmts_rest_legendurl'] = legendurl
1953
1966
  tile_layers.append(
1954
1967
  TileLayer(
1955
1968
  self.conf['name'], self.conf['title'],
1956
1969
  info_sources=fi_sources,
1957
1970
  md=md,
1958
1971
  tile_manager=cache_source,
1959
- dimensions=dimensions,
1972
+ dimensions=dimensions
1960
1973
  )
1961
1974
  )
1962
1975
 
@@ -2287,6 +2300,10 @@ def load_configuration(mapproxy_conf, seed=False, ignore_warnings=True, renderd=
2287
2300
  for error in errors:
2288
2301
  log.warning(error)
2289
2302
 
2303
+ services = conf_dict.get('services')
2304
+ if services is not None and 'demo' in services:
2305
+ log.warning('Application has demo page enabled. It is recommended to disable this in production.')
2306
+
2290
2307
  return ProxyConfiguration(conf_dict, conf_base_dir=conf_base_dir, seed=seed,
2291
2308
  renderd=renderd)
2292
2309
 
@@ -615,6 +615,8 @@ mapproxy_yaml_spec = {
615
615
  'name': str(),
616
616
  required('title'): str,
617
617
  'legendurl': str(),
618
+ 'wmts_rest_legendurl': str(),
619
+ 'wmts_kvp_legendurl': str(),
618
620
  'layers': recursive(),
619
621
  'md': wms_130_layer_md,
620
622
  'dimensions': {
@@ -17,7 +17,10 @@ from __future__ import division
17
17
 
18
18
  import logging
19
19
  import os
20
- import importlib_resources
20
+ try:
21
+ import importlib_resources
22
+ except ImportError:
23
+ from importlib import resources as importlib_resources
21
24
 
22
25
  from mapproxy.config import base_config, abspath
23
26
  from mapproxy.compat.image import Image, ImageColor, ImageDraw, ImageFont
@@ -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}