MapProxy 2.2.0__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.2.0 → mapproxy-2.2.1}/CHANGES.txt +9 -0
  2. {MapProxy-2.2.0 → mapproxy-2.2.1}/MapProxy.egg-info/PKG-INFO +27 -30
  3. {MapProxy-2.2.0 → mapproxy-2.2.1}/MapProxy.egg-info/SOURCES.txt +1 -0
  4. {MapProxy-2.2.0 → mapproxy-2.2.1}/MapProxy.egg-info/entry_points.txt +0 -1
  5. {MapProxy-2.2.0 → mapproxy-2.2.1}/PKG-INFO +27 -30
  6. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/deployment.rst +2 -0
  7. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config/loader.py +4 -0
  8. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/multiapp.py +2 -1
  9. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/demo.py +62 -54
  10. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/kml.py +2 -1
  11. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/capabilities_demo.html +1 -3
  12. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util_grids.yaml +2 -1
  13. mapproxy-2.2.1/mapproxy/test/system/test_demo.py +123 -0
  14. mapproxy-2.2.1/mapproxy/util/escape.py +10 -0
  15. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/wsgiapp.py +2 -1
  16. {MapProxy-2.2.0 → mapproxy-2.2.1}/setup.py +1 -1
  17. MapProxy-2.2.0/mapproxy/test/system/test_demo.py +0 -56
  18. {MapProxy-2.2.0 → mapproxy-2.2.1}/AUTHORS.txt +0 -0
  19. {MapProxy-2.2.0 → mapproxy-2.2.1}/COPYING.txt +0 -0
  20. {MapProxy-2.2.0 → mapproxy-2.2.1}/LICENSE.txt +0 -0
  21. {MapProxy-2.2.0 → mapproxy-2.2.1}/MANIFEST.in +0 -0
  22. {MapProxy-2.2.0 → mapproxy-2.2.1}/MapProxy.egg-info/dependency_links.txt +0 -0
  23. {MapProxy-2.2.0 → mapproxy-2.2.1}/MapProxy.egg-info/not-zip-safe +0 -0
  24. {MapProxy-2.2.0 → mapproxy-2.2.1}/MapProxy.egg-info/requires.txt +2 -2
  25. {MapProxy-2.2.0 → mapproxy-2.2.1}/MapProxy.egg-info/top_level.txt +0 -0
  26. {MapProxy-2.2.0 → mapproxy-2.2.1}/README.md +0 -0
  27. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/GM.txt +0 -0
  28. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/_static/logo.png +0 -0
  29. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/_static/logo_title.png +0 -0
  30. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/_static/mapproxy.css +0 -0
  31. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/_templates/versions.html +0 -0
  32. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/auth.rst +0 -0
  33. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/caches.rst +0 -0
  34. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/caching_layer_dimensions.rst +0 -0
  35. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/conf.py +0 -0
  36. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/configuration.rst +0 -0
  37. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/configuration_examples.rst +0 -0
  38. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/coverages.rst +0 -0
  39. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/decorate_img.rst +0 -0
  40. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/development.rst +0 -0
  41. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/bicubic.png +0 -0
  42. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/bilinear.png +0 -0
  43. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/labeling-dynamic.png +0 -0
  44. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/labeling-meta-buffer.png +0 -0
  45. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/labeling-metatiling-buffer.png +0 -0
  46. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/labeling-metatiling.png +0 -0
  47. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/labeling-no-clip.png +0 -0
  48. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/labeling-no-placement.png +0 -0
  49. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/labeling-partial-false.png +0 -0
  50. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/labeling-repeated.png +0 -0
  51. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/mapnik-webmerc-hq.png +0 -0
  52. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/mapnik-webmerc.png +0 -0
  53. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/mapproxy-demo.png +0 -0
  54. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/imgs/nearest.png +0 -0
  55. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/index.rst +0 -0
  56. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/inspire.rst +0 -0
  57. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/install.rst +0 -0
  58. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/install_docker.rst +0 -0
  59. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/install_osgeo4w.rst +0 -0
  60. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/install_windows.rst +0 -0
  61. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/labeling.rst +0 -0
  62. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/mapproxy_util.rst +0 -0
  63. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/mapproxy_util_autoconfig.rst +0 -0
  64. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/plugins.rst +0 -0
  65. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/seed.rst +0 -0
  66. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/services.rst +0 -0
  67. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/sources.rst +0 -0
  68. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/tutorial.rst +0 -0
  69. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/tutorial.yaml +0 -0
  70. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/yaml/cache_conf.yaml +0 -0
  71. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/yaml/grid_conf.yaml +0 -0
  72. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/yaml/merged_conf.yaml +0 -0
  73. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/yaml/meta_conf.yaml +0 -0
  74. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/yaml/seed.yaml +0 -0
  75. {MapProxy-2.2.0 → mapproxy-2.2.1}/doc/yaml/simple_conf.yaml +0 -0
  76. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/__init__.py +0 -0
  77. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/__init__.py +0 -0
  78. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/azureblob.py +0 -0
  79. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/base.py +0 -0
  80. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/compact.py +0 -0
  81. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/couchdb.py +0 -0
  82. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/dummy.py +0 -0
  83. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/file.py +0 -0
  84. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/geopackage.py +0 -0
  85. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/legend.py +0 -0
  86. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/mbtiles.py +0 -0
  87. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/meta.py +0 -0
  88. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/path.py +0 -0
  89. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/redis.py +0 -0
  90. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/renderd.py +0 -0
  91. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/riak.py +0 -0
  92. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/s3.py +0 -0
  93. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/cache/tile.py +0 -0
  94. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/client/__init__.py +0 -0
  95. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/client/arcgis.py +0 -0
  96. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/client/cgi.py +0 -0
  97. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/client/http.py +0 -0
  98. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/client/log.py +0 -0
  99. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/client/tile.py +0 -0
  100. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/client/wms.py +0 -0
  101. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/compat/__init__.py +0 -0
  102. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/compat/image.py +0 -0
  103. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config/__init__.py +0 -0
  104. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config/config-schema.json +0 -0
  105. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config/config.py +0 -0
  106. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config/coverage.py +0 -0
  107. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config/defaults.py +0 -0
  108. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config/spec.py +0 -0
  109. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config/validator.py +0 -0
  110. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config_template/__init__.py +0 -0
  111. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config_template/base_config/config.wsgi +0 -0
  112. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config_template/base_config/full_example.yaml +0 -0
  113. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config_template/base_config/full_seed_example.yaml +0 -0
  114. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config_template/base_config/log.ini +0 -0
  115. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config_template/base_config/mapproxy.yaml +0 -0
  116. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/config_template/base_config/seed.yaml +0 -0
  117. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/exception.py +0 -0
  118. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/featureinfo.py +0 -0
  119. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/grid.py +0 -0
  120. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/image/__init__.py +0 -0
  121. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/image/fonts/DejaVuSans.ttf +0 -0
  122. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/image/fonts/DejaVuSansMono.ttf +0 -0
  123. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/image/fonts/LICENSE +0 -0
  124. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/image/fonts/__init__.py +0 -0
  125. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/image/mask.py +0 -0
  126. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/image/merge.py +0 -0
  127. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/image/message.py +0 -0
  128. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/image/opts.py +0 -0
  129. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/image/tile.py +0 -0
  130. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/image/transform.py +0 -0
  131. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/layer.py +0 -0
  132. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/proj.py +0 -0
  133. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/request/__init__.py +0 -0
  134. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/request/arcgis.py +0 -0
  135. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/request/base.py +0 -0
  136. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/request/tile.py +0 -0
  137. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/request/wms/__init__.py +0 -0
  138. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/request/wms/exception.py +0 -0
  139. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/request/wmts.py +0 -0
  140. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/response.py +0 -0
  141. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/__init__.py +0 -0
  142. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/conf/__init__.py +0 -0
  143. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/conf/app.py +0 -0
  144. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/conf/caches.py +0 -0
  145. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/conf/geopackage.py +0 -0
  146. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/conf/layers.py +0 -0
  147. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/conf/seeds.py +0 -0
  148. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/conf/sources.py +0 -0
  149. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/conf/utils.py +0 -0
  150. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/defrag.py +0 -0
  151. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/export.py +0 -0
  152. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/grids.py +0 -0
  153. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/scales.py +0 -0
  154. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/util.py +0 -0
  155. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/script/wms_capabilities.py +0 -0
  156. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/seed/__init__.py +0 -0
  157. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/seed/cachelock.py +0 -0
  158. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/seed/cleanup.py +0 -0
  159. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/seed/config.py +0 -0
  160. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/seed/script.py +0 -0
  161. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/seed/seeder.py +0 -0
  162. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/seed/spec.py +0 -0
  163. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/seed/util.py +0 -0
  164. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/__init__.py +0 -0
  165. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/base.py +0 -0
  166. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/ows.py +0 -0
  167. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/template_helper.py +0 -0
  168. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/demo.html +0 -0
  169. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/openlayers-demo.cfg +0 -0
  170. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/blank.gif +0 -0
  171. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/east-mini.png +0 -0
  172. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/north-mini.png +0 -0
  173. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/south-mini.png +0 -0
  174. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/west-mini.png +0 -0
  175. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/zoom-minus-mini.png +0 -0
  176. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/zoom-plus-mini.png +0 -0
  177. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/img/zoom-world-mini.png +0 -0
  178. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/logo.png +0 -0
  179. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/ol.css +0 -0
  180. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/ol.js +0 -0
  181. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/proj4.min.js +0 -0
  182. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/proj4defs.js +0 -0
  183. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/site.css +0 -0
  184. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/theme/default/framedCloud.css +0 -0
  185. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/theme/default/google.css +0 -0
  186. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/theme/default/ie6-style.css +0 -0
  187. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static/theme/default/style.css +0 -0
  188. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/static.html +0 -0
  189. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/tms_demo.html +0 -0
  190. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/wms_demo.html +0 -0
  191. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/demo/wmts_demo.html +0 -0
  192. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/tms_capabilities.xml +0 -0
  193. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/tms_exception.xml +0 -0
  194. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/tms_root_resource.xml +0 -0
  195. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/tms_tilemap_capabilities.xml +0 -0
  196. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/wms100capabilities.xml +0 -0
  197. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/wms100exception.xml +0 -0
  198. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/wms110capabilities.xml +0 -0
  199. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/wms110exception.xml +0 -0
  200. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/wms111capabilities.xml +0 -0
  201. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/wms111exception.xml +0 -0
  202. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/wms130capabilities.xml +0 -0
  203. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/wms130exception.xml +0 -0
  204. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/wmts100capabilities.xml +0 -0
  205. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/templates/wmts100exception.xml +0 -0
  206. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/tile.py +0 -0
  207. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/wms.py +0 -0
  208. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/service/wmts.py +0 -0
  209. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/source/__init__.py +0 -0
  210. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/source/arcgis.py +0 -0
  211. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/source/error.py +0 -0
  212. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/source/mapnik.py +0 -0
  213. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/source/tile.py +0 -0
  214. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/source/wms.py +0 -0
  215. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/srs.py +0 -0
  216. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/template.py +0 -0
  217. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/__init__.py +0 -0
  218. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/conftest.py +0 -0
  219. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/helper.py +0 -0
  220. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/http.py +0 -0
  221. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/image.py +0 -0
  222. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/mocker.py +0 -0
  223. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/common.xsd +0 -0
  224. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_bul.xsd +0 -0
  225. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_cze.xsd +0 -0
  226. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dan.xsd +0 -0
  227. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_dut.xsd +0 -0
  228. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_eng.xsd +0 -0
  229. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_est.xsd +0 -0
  230. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fin.xsd +0 -0
  231. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_fre.xsd +0 -0
  232. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ger.xsd +0 -0
  233. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gle.xsd +0 -0
  234. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_gre.xsd +0 -0
  235. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_hun.xsd +0 -0
  236. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_ita.xsd +0 -0
  237. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lav.xsd +0 -0
  238. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_lit.xsd +0 -0
  239. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_mlt.xsd +0 -0
  240. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_pol.xsd +0 -0
  241. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_por.xsd +0 -0
  242. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_rum.xsd +0 -0
  243. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slo.xsd +0 -0
  244. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_slv.xsd +0 -0
  245. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_spa.xsd +0 -0
  246. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/enums/enum_swe.xsd +0 -0
  247. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/common/1.0/network.xsd +0 -0
  248. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/inspire/inspire_vs/1.0/inspire_vs.xsd +0 -0
  249. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/kml/2.2.0/ReadMe.txt +0 -0
  250. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/kml/2.2.0/atom-author-link.xsd +0 -0
  251. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/kml/2.2.0/ogckml22.xsd +0 -0
  252. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/kml/2.2.0/xAL.xsd +0 -0
  253. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/ReadMe.txt +0 -0
  254. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/ows19115subset.xsd +0 -0
  255. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsAll.xsd +0 -0
  256. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsCommon.xsd +0 -0
  257. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsContents.xsd +0 -0
  258. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsDataIdentification.xsd +0 -0
  259. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsDomainType.xsd +0 -0
  260. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsExceptionReport.xsd +0 -0
  261. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsGetCapabilities.xsd +0 -0
  262. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsGetResourceByID.xsd +0 -0
  263. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsInputOutputData.xsd +0 -0
  264. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsManifest.xsd +0 -0
  265. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsOperationsMetadata.xsd +0 -0
  266. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsServiceIdentification.xsd +0 -0
  267. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/ows/1.1.0/owsServiceProvider.xsd +0 -0
  268. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/sld/1.1.0/sld_capabilities.xsd +0 -0
  269. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.dtd +0 -0
  270. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.xml +0 -0
  271. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.dtd +0 -0
  272. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.xml +0 -0
  273. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.dtd +0 -0
  274. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.xml +0 -0
  275. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.dtd +0 -0
  276. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.xml +0 -0
  277. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/OGC-exception.xsd +0 -0
  278. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
  279. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd +0 -0
  280. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd +0 -0
  281. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.dtd +0 -0
  282. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.xml +0 -0
  283. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.dtd +0 -0
  284. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.xml +0 -0
  285. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.3.0/ReadMe.txt +0 -0
  286. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xml +0 -0
  287. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xsd +0 -0
  288. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xml +0 -0
  289. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xsd +0 -0
  290. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/OGC-exception.xsd +0 -0
  291. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/WMS_DescribeLayerResponse.dtd +0 -0
  292. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/WMS_MS_Capabilities.dtd +0 -0
  293. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/WMS_exception_1_1_1.dtd +0 -0
  294. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.dtd +0 -0
  295. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.xml +0 -0
  296. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.dtd +0 -0
  297. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.xml +0 -0
  298. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/ReadMe.txt +0 -0
  299. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmts.xsd +0 -0
  300. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsAbstract.wsdl +0 -0
  301. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_request.xsd +0 -0
  302. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_response.xsd +0 -0
  303. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_request.xsd +0 -0
  304. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_response.xsd +0 -0
  305. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsGetTile_request.xsd +0 -0
  306. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsKVP.xsd +0 -0
  307. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/wmts/1.0/wmtsPayload_response.xsd +0 -0
  308. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/xlink/1.0.0/ReadMe.txt +0 -0
  309. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/xlink/1.0.0/xlinks.xsd +0 -0
  310. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/schemas/xml.xsd +0 -0
  311. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/__init__.py +0 -0
  312. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/arcgis.yaml +0 -0
  313. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/auth.yaml +0 -0
  314. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache.mbtiles +0 -0
  315. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_azureblob.yaml +0 -0
  316. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_band_merge.yaml +0 -0
  317. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_bulk_meta_tiles.yaml +0 -0
  318. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_coverage.yaml +0 -0
  319. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png +0 -0
  320. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_data/wms_cache_EPSG900913/01/000/000/000/000/000/001.jpeg +0 -0
  321. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_data/wms_cache_transparent_EPSG900913/01/000/000/000/000/000/001.png +0 -0
  322. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_geopackage.yaml +0 -0
  323. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_grid_names.yaml +0 -0
  324. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_mbtiles.yaml +0 -0
  325. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_s3.yaml +0 -0
  326. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/cache_source.yaml +0 -0
  327. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/combined_sources.yaml +0 -0
  328. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/coverage.yaml +0 -0
  329. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/demo.yaml +0 -0
  330. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/dimension.yaml +0 -0
  331. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/disable_storage.yaml +0 -0
  332. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/empty_ogrdata.geojson +0 -0
  333. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/formats.yaml +0 -0
  334. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/inspire.yaml +0 -0
  335. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/inspire_full.yaml +0 -0
  336. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/kml_layer.yaml +0 -0
  337. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/layer.yaml +0 -0
  338. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/layergroups.yaml +0 -0
  339. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/layergroups_root.yaml +0 -0
  340. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/legendgraphic.yaml +0 -0
  341. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/mapnik_source.yaml +0 -0
  342. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/mapproxy_export.yaml +0 -0
  343. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/mapserver.yaml +0 -0
  344. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/minimal_cgi.py +0 -0
  345. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/mixed_mode.yaml +0 -0
  346. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/multi_cache_layers.yaml +0 -0
  347. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/multiapp1.yaml +0 -0
  348. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/multiapp2.yaml +0 -0
  349. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/renderd_client.yaml +0 -0
  350. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/scalehints.yaml +0 -0
  351. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/seed.yaml +0 -0
  352. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/seed_mapproxy.yaml +0 -0
  353. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/seed_old.yaml +0 -0
  354. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/seed_timeouts.yaml +0 -0
  355. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/seed_timeouts_mapproxy.yaml +0 -0
  356. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/seedonly.yaml +0 -0
  357. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/sld.yaml +0 -0
  358. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/source_errors.yaml +0 -0
  359. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/source_errors_raise.yaml +0 -0
  360. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/tileservice_origin.yaml +0 -0
  361. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/tileservice_refresh.yaml +0 -0
  362. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/tilesource_minmax_res.yaml +0 -0
  363. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util-conf-base-grids.yaml +0 -0
  364. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util-conf-overwrite.yaml +0 -0
  365. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util-conf-wms-111-cap.xml +0 -0
  366. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util_wms_capabilities111.xml +0 -0
  367. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util_wms_capabilities130.xml +0 -0
  368. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/util_wms_capabilities_service_exception.xml +0 -0
  369. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/watermark.yaml +0 -0
  370. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/wms_srs_extent.yaml +0 -0
  371. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/wms_versions.yaml +0 -0
  372. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/wmts.yaml +0 -0
  373. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/wmts_dimensions.yaml +0 -0
  374. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/xslt_featureinfo.yaml +0 -0
  375. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/fixture/xslt_featureinfo_input.yaml +0 -0
  376. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_arcgis.py +0 -0
  377. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_auth.py +0 -0
  378. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_behind_proxy.py +0 -0
  379. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_bulk_meta_tiles.py +0 -0
  380. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_azureblob.py +0 -0
  381. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_band_merge.py +0 -0
  382. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_coverage.py +0 -0
  383. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_geopackage.py +0 -0
  384. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_grid_names.py +0 -0
  385. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_mbtiles.py +0 -0
  386. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_s3.py +0 -0
  387. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_cache_source.py +0 -0
  388. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_combined_sources.py +0 -0
  389. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_coverage.py +0 -0
  390. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_decorate_img.py +0 -0
  391. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_demo_with_extra_service.py +0 -0
  392. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_dimensions.py +0 -0
  393. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_disable_storage.py +0 -0
  394. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_formats.py +0 -0
  395. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_inspire_vs.py +0 -0
  396. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_kml.py +0 -0
  397. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_layergroups.py +0 -0
  398. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_legendgraphic.py +0 -0
  399. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_mapnik.py +0 -0
  400. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_mapserver.py +0 -0
  401. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_mixed_mode_format.py +0 -0
  402. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_multi_cache_layers.py +0 -0
  403. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_multiapp.py +0 -0
  404. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_refresh.py +0 -0
  405. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_renderd_client.py +0 -0
  406. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_response_headers.py +0 -0
  407. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_scalehints.py +0 -0
  408. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_seed.py +0 -0
  409. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_seed_only.py +0 -0
  410. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_sld.py +0 -0
  411. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_source_errors.py +0 -0
  412. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_tilesource_minmax_res.py +0 -0
  413. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_tms.py +0 -0
  414. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_tms_origin.py +0 -0
  415. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_util_conf.py +0 -0
  416. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_util_export.py +0 -0
  417. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_util_grids.py +0 -0
  418. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_util_wms_capabilities.py +0 -0
  419. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_watermark.py +0 -0
  420. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_wms.py +0 -0
  421. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_wms_srs_extent.py +0 -0
  422. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_wms_version.py +0 -0
  423. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_wmsc.py +0 -0
  424. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_wmts.py +0 -0
  425. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_wmts_dimensions.py +0 -0
  426. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_wmts_restful.py +0 -0
  427. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/system/test_xslt_featureinfo.py +0 -0
  428. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/test_http_helper.py +0 -0
  429. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/__init__.py +0 -0
  430. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/epsg +0 -0
  431. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/polygons/polygons.dbf +0 -0
  432. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/polygons/polygons.shp +0 -0
  433. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/polygons/polygons.shx +0 -0
  434. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_async.py +0 -0
  435. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_auth.py +0 -0
  436. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache.py +0 -0
  437. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_azureblob.py +0 -0
  438. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_compact.py +0 -0
  439. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_couchdb.py +0 -0
  440. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_geopackage.py +0 -0
  441. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_redis.py +0 -0
  442. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_riak.py +0 -0
  443. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_s3.py +0 -0
  444. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_cache_tile.py +0 -0
  445. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_client.py +0 -0
  446. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_client_arcgis.py +0 -0
  447. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_client_cgi.py +0 -0
  448. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_collections.py +0 -0
  449. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_concat_legends.py +0 -0
  450. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_conf_loader.py +0 -0
  451. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_conf_validator.py +0 -0
  452. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_config.py +0 -0
  453. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_decorate_img.py +0 -0
  454. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_exceptions.py +0 -0
  455. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_featureinfo.py +0 -0
  456. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_file_lock_load.py +0 -0
  457. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_geom.py +0 -0
  458. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_grid.py +0 -0
  459. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_image.py +0 -0
  460. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_image_mask.py +0 -0
  461. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_image_messages.py +0 -0
  462. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_image_options.py +0 -0
  463. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_isodate.py +0 -0
  464. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_multiapp.py +0 -0
  465. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_ogr_reader.py +0 -0
  466. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_request.py +0 -0
  467. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_request_wmts.py +0 -0
  468. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_response.py +0 -0
  469. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_seed.py +0 -0
  470. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_seed_cachelock.py +0 -0
  471. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_srs.py +0 -0
  472. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_tiled_source.py +0 -0
  473. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_tilefilter.py +0 -0
  474. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_times.py +0 -0
  475. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_timeutils.py +0 -0
  476. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_util_conf_utils.py +0 -0
  477. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_utils.py +0 -0
  478. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_wms_capabilities.py +0 -0
  479. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_wms_layer.py +0 -0
  480. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/test/unit/test_yaml.py +0 -0
  481. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/tilefilter.py +0 -0
  482. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/__init__.py +0 -0
  483. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/async_.py +0 -0
  484. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/collections.py +0 -0
  485. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/coverage.py +0 -0
  486. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/__init__.py +0 -0
  487. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/dictspec/__init__.py +0 -0
  488. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/dictspec/spec.py +0 -0
  489. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/dictspec/test/__init__.py +0 -0
  490. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/dictspec/test/test_validator.py +0 -0
  491. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/dictspec/validator.py +0 -0
  492. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/local.py +0 -0
  493. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/lockfile.py +0 -0
  494. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/odict.py +0 -0
  495. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/serving.py +0 -0
  496. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/tempita/__init__.py +0 -0
  497. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/tempita/_looper.py +0 -0
  498. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/tempita/string_utils.py +0 -0
  499. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/__init__.py +0 -0
  500. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/duration.py +0 -0
  501. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/parse.py +0 -0
  502. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/__init__.py +0 -0
  503. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/test_parse.py +0 -0
  504. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/test_util.py +0 -0
  505. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/wms-example-111.xml +0 -0
  506. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/wms-example-130.xml +0 -0
  507. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/wms-large-111.xml +0 -0
  508. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml +0 -0
  509. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ext/wmsparse/util.py +0 -0
  510. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/fs.py +0 -0
  511. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/geom.py +0 -0
  512. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/lib.py +0 -0
  513. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/lock.py +0 -0
  514. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/ogr.py +0 -0
  515. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/py.py +0 -0
  516. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/times.py +0 -0
  517. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/util/yaml.py +0 -0
  518. {MapProxy-2.2.0 → mapproxy-2.2.1}/mapproxy/version.py +0 -0
  519. {MapProxy-2.2.0 → mapproxy-2.2.1}/requirements-tests.txt +0 -0
  520. {MapProxy-2.2.0 → mapproxy-2.2.1}/setup.cfg +0 -0
@@ -1,3 +1,12 @@
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
+
1
10
  2.2.0 2024-07-24
2
11
  ~~~~~~~~~~~~~~~~
3
12
 
@@ -1,12 +1,11 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: MapProxy
3
- Version: 2.2.0
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,15 @@ 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
+
37
61
  2.2.0 2024-07-24
38
62
  ~~~~~~~~~~~~~~~~
39
63
 
@@ -136,34 +160,7 @@ Fixes:
136
160
  - Some more minor fixups
137
161
 
138
162
 
139
- 1.16.0 2023-04-13
140
- ~~~~~~~~~~~~~~~~~
141
- Breaking:
142
-
143
- - Removal of old unsupported python versions 2.7 and 3.6
144
- - Tested python version range is now 3.7 to 3.11
145
- - Lots of dependency updates
146
-
147
- Improvements:
148
-
149
- - New cache: Azure Blob storage
150
- - Lots of dependency updates
151
- - Support for JSON legends
152
- - Updated layer preview to use latest openlayers
153
- - Official docker images released, documentation updated
154
-
155
- Fixes:
156
-
157
- - Fixed issues with sqlite cache (#629 and #625)
158
- - Dependency correction
159
- - library detection difficulties on some operating systems
160
- - encoding issues with umlauts in featureinfo
161
- - Several minor bugfixes
162
- - mapproxy-util export - derive image format from cache config
163
-
164
163
 
165
164
  Older changes
166
165
  -------------
167
166
  See https://raw.github.com/mapproxy/mapproxy/master/CHANGES.txt
168
-
169
-
@@ -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,12 +1,11 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: MapProxy
3
- Version: 2.2.0
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,15 @@ 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
+
37
61
  2.2.0 2024-07-24
38
62
  ~~~~~~~~~~~~~~~~
39
63
 
@@ -136,34 +160,7 @@ Fixes:
136
160
  - Some more minor fixups
137
161
 
138
162
 
139
- 1.16.0 2023-04-13
140
- ~~~~~~~~~~~~~~~~~
141
- Breaking:
142
-
143
- - Removal of old unsupported python versions 2.7 and 3.6
144
- - Tested python version range is now 3.7 to 3.11
145
- - Lots of dependency updates
146
-
147
- Improvements:
148
-
149
- - New cache: Azure Blob storage
150
- - Lots of dependency updates
151
- - Support for JSON legends
152
- - Updated layer preview to use latest openlayers
153
- - Official docker images released, documentation updated
154
-
155
- Fixes:
156
-
157
- - Fixed issues with sqlite cache (#629 and #625)
158
- - Dependency correction
159
- - library detection difficulties on some operating systems
160
- - encoding issues with umlauts in featureinfo
161
- - Several minor bugfixes
162
- - mapproxy-util export - derive image format from cache config
163
-
164
163
 
165
164
  Older changes
166
165
  -------------
167
166
  See https://raw.github.com/mapproxy/mapproxy/master/CHANGES.txt
168
-
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
@@ -2300,6 +2300,10 @@ def load_configuration(mapproxy_conf, seed=False, ignore_warnings=True, renderd=
2300
2300
  for error in errors:
2301
2301
  log.warning(error)
2302
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
+
2303
2307
  return ProxyConfiguration(conf_dict, conf_base_dir=conf_base_dir, seed=seed,
2304
2308
  renderd=renderd)
2305
2309
 
@@ -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' % (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&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)
178
- else:
179
- internal_url = '%s/tms/1.0.0/' % (req.server_script_url)
180
- if 'type' in req.args and req.args['type'] == 'external':
181
- url = internal_url.replace(req.server_script_url, req.script_url)
195
+ # prevent dir traversal (seems it's not possible with urllib2, but better safe than sorry)
196
+ layer = escape_html(req.args['layer'].replace('..', ''))
197
+ srs = escape_html(req.args['srs'].replace('..', ''))
198
+ service_path = f'/tms/1.0.0/{layer}/{srs}'
182
199
  else:
183
- 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,
@@ -330,8 +350,8 @@ class DemoServer(Server):
330
350
  background_url = self.background["url"]
331
351
  return template.substitute(layer=wmts_layer,
332
352
  matrix_set=wmts_layer.grid.name,
333
- format=escape(req.args['format']),
334
- srs=escape(req.args['srs']),
353
+ format=escape_html(req.args['format']),
354
+ srs=escape_html(req.args['srs']),
335
355
  resolutions=wmts_layer.grid.resolutions,
336
356
  units=units,
337
357
  all_tile_layers=self.tile_layers,
@@ -353,15 +373,3 @@ class DemoServer(Server):
353
373
  return True
354
374
  return False
355
375
  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
 
@@ -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
@@ -0,0 +1,123 @@
1
+ # This file is part of the MapProxy project.
2
+ # Copyright (C) 2022 Even Rouault
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ import re
17
+ import pytest
18
+
19
+ from mapproxy.test.http import mock_httpd
20
+ from mapproxy.test.system import SysTest
21
+ from webtest import AppError
22
+
23
+
24
+ @pytest.fixture(scope="module")
25
+ def config_file():
26
+ return "demo.yaml"
27
+
28
+
29
+ class TestDemo(SysTest):
30
+
31
+ def test_basic(self, app):
32
+ resp = app.get("/demo/", status=200)
33
+ assert resp.content_type == "text/html"
34
+ assert 'href="../service?REQUEST=GetCapabilities"' in resp
35
+ assert 'href="../service?REQUEST=GetCapabilities&tiled=true"' in resp
36
+ assert 'href="../demo/?wmts_layer=wms_cache&format=jpeg&srs=EPSG%3A900913"' in resp
37
+ assert 'href="../demo/?tms_layer=wms_cache&format=jpeg&srs=EPSG%3A900913"' in resp
38
+
39
+ def test_previewmap(self, app):
40
+ resp = app.get("/demo/?srs=EPSG%3A3857&format=image%2Fpng&wms_layer=wms_cache", status=200)
41
+ assert resp.content_type == "text/html"
42
+ assert '<h2>Layer Preview - wms_cache</h2>' in resp
43
+
44
+ def test_layers_sorted_by_name(self, app):
45
+ resp = app.get("/demo/", status=200)
46
+
47
+ patternTable = re.compile(r'<table class="code">.*?</table>', re.DOTALL)
48
+ patternWMS = r'<td\s+rowspan="2">([\w\d-]+)</td>'
49
+ patternWMTS_TBS = r'<td\s+rowspan="1">([\w\d-]+)</td>'
50
+ tables = patternTable.findall(resp.text)
51
+
52
+ layersWMS = re.findall(patternWMS, resp.text, re.IGNORECASE)
53
+ layersWMTS = re.findall(patternWMTS_TBS, tables[1], re.IGNORECASE)
54
+ layersTBS = re.findall(patternWMTS_TBS, tables[2], re.IGNORECASE)
55
+
56
+ assert layersWMS == sorted(layersWMS)
57
+ assert layersWMTS == sorted(layersWMTS)
58
+ assert layersTBS == sorted(layersTBS)
59
+
60
+ def test_external(self, app):
61
+ expected_req = (
62
+ {
63
+ "path": r"/path/service?REQUEST=GetCapabilities&SERVICE=WMS"
64
+ },
65
+ {"body": b"test-string", "headers": {"content-type": "text/xml"}}
66
+ )
67
+ with mock_httpd(
68
+ ("localhost", 42423), [expected_req]
69
+ ):
70
+ resp = app.get('/demo/?wms_capabilities&type=external', extra_environ={
71
+ 'HTTP_X_FORWARDED_HOST': 'localhost:42423/path'
72
+ })
73
+ content = resp.text
74
+ assert 'test-string' in content
75
+ assert 'http://localhost:42423/path/service?REQUEST=GetCapabilities&SERVICE=WMS' in content
76
+
77
+ def test_external_xss_injection(self, app):
78
+ expected_req = (
79
+ {
80
+ "path": r"/path/&gt;&lt;script&gt;alert(XSS)&lt;/script&gt;/service?REQUEST=GetCapabilities&SERVICE=WMS"
81
+ },
82
+ {"body": b"test-string", "headers": {"content-type": "text/xml"}}
83
+ )
84
+
85
+ with mock_httpd(
86
+ ("localhost", 42423), [expected_req]
87
+ ):
88
+ resp = app.get('/demo/?wms_capabilities&type=external', extra_environ={
89
+ 'HTTP_X_FORWARDED_HOST': 'localhost:42423/path/"><script>alert(\'XSS\')</script>'
90
+ })
91
+ content = resp.text
92
+ assert 'test-string' in content
93
+ assert '"><script>alert(\'XSS\')' not in content
94
+ assert '&gt;&lt;script&gt;alert(XSS)&lt;/script&gt;' in content
95
+
96
+ def test_external_file_protocol(self, app):
97
+ try:
98
+ app.get('/demo/?wms_capabilities&type=external', extra_environ={
99
+ 'HTTP_X_FORWARDED_PROTO': 'file'
100
+ })
101
+ except AppError as e:
102
+ assert '400 Bad Request' in e.args[0]
103
+
104
+ def test_tms_layer_xss(self, app):
105
+ expected_req = (
106
+ {
107
+ "path": r"/tms/1.0.0/osm&gt;&lt;script&gt;alert(XSS)&lt;/script&gt;/1.0.0"
108
+ },
109
+ {"body": b"test-string", "headers": {"content-type": "text/xml"}}
110
+ )
111
+
112
+ with mock_httpd(
113
+ ("localhost", 42423), [expected_req]
114
+ ):
115
+ resp = app.get(
116
+ '/demo/?tms_capabilities&layer=osm"><script>alert(\'XSS\')</script>&type=external&srs=1.0.0',
117
+ extra_environ={
118
+ 'HTTP_X_FORWARDED_HOST': 'localhost:42423'
119
+ }
120
+ )
121
+ content = resp.text
122
+ assert '"><script>alert(\'XSS\')' not in content
123
+ assert '&gt;&lt;script&gt;alert(XSS)&lt;/script&gt;' in content
@@ -0,0 +1,10 @@
1
+ def escape_html(data):
2
+ """
3
+ Escape user-provided input data for safe inclusion in HTML _and_ JS to prevent XSS.
4
+ """
5
+ data = data.replace('&', '&amp;')
6
+ data = data.replace('>', '&gt;')
7
+ data = data.replace('<', '&lt;')
8
+ data = data.replace("'", '')
9
+ data = data.replace('"', '')
10
+ return data
@@ -34,6 +34,7 @@ from mapproxy.request import Request
34
34
  from mapproxy.response import Response
35
35
  from mapproxy.config import local_base_config
36
36
  from mapproxy.config.loader import load_configuration, ConfigurationError
37
+ from mapproxy.util.escape import escape_html
37
38
 
38
39
  log = logging.getLogger('mapproxy.config')
39
40
  log_wsgiapp = logging.getLogger('mapproxy.wsgiapp')
@@ -164,7 +165,7 @@ class MapProxyApp(object):
164
165
  resp = Response('internal error', status=500)
165
166
  if resp is None:
166
167
  if req.path in ('', '/'):
167
- resp = self.welcome_response(req.script_url)
168
+ resp = self.welcome_response(escape_html(req.script_url))
168
169
  else:
169
170
  resp = Response('not found', mimetype='text/plain', status=404)
170
171
  return resp(environ, start_response)
@@ -63,7 +63,7 @@ def long_description(changelog_releases=10):
63
63
 
64
64
  setup(
65
65
  name='MapProxy',
66
- version="2.2.0",
66
+ version="2.2.1",
67
67
  description='An accelerating proxy for tile and web map services',
68
68
  long_description=long_description(7),
69
69
  author='Oliver Tonnhofer',